Я получаю «ValueError: не удалось преобразовать строку в число с плавающей точкой» в столбец, который не должен читаться - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь использовать линейную регрессию, чтобы предсказать средний рейтинг фильма, основанный на трех столбцах, которые будут моими "X" (genre1, genre2 и genre3), я отбросил остальные столбцы и мой "Y"будет столбец среднего рейтинга. Я преобразовал жанры в число, которое представляет его. Это мой первый проект по машинному обучению, я не уверен, что линейная регрессия может быть хорошим алгоритмом для этого случая.

Я пытался добавить (genre1, genre2, genre3) все случаи использования какой-либо категории, например"Comedy: 6565" в списке и используйте этот список как мой X. Я пытался использовать OneHotEnconding, но создание столбца для каждой категории будет слишком тяжелым.

import pandas as pd
from collections import Counter
from sklearn.linear_model import LinearRegression

reg = LinearRegression() #Instance
list1 = [[105180,1971.0,"Sono un marito infedele","Êtes-vous fiancée à un marin grec ou à un pilote de ligne?",0,96.0,"Comedy","","","IT",0.0,42.0,5.3]]
list2 = [[34325,1942.0,"Que viene el coco","The Boogie Man Will Get You",0,66.0,"Comedy","Horror","","ES",0.0,682.0]]
train = pd.DataFrame(list1,columns=["id","startYear","title","originalTitle","isAdult","runtimeMinutes","genre1","genre2","genre3","region","isOriginalTitle","numVotes","averageRating"])#trainfile
test = pd.DataFrame(list2,columns=["id","startYear","title","originalTitle","isAdult","runtimeMinutes","genre1","genre2","genre3","region","isOriginalTitle","numVotes"])
#Test file
train["genre1"].fillna(-1, inplace=True)#replacing NaN
train["genre2"].fillna(-1, inplace=True)#replacing NaN
train["genre3"].fillna(-1, inplace=True)#replacing NaN
l1 = list(train["genre1"].unique())
l2 = list(train["genre2"].unique())
l3 = list(train["genre3"].unique())
genres =list(set(l1)|set(l2)|set(l3))
col = ["genre1","genre2","genre3"]
di = {}#dic with {0:Comedy,1:Action...}
for f in range(len(genres)):
    di[f] = genres[f]
for colum in col:
    for gen in range(len(genres)):
        train[train[colum] == genres[gen]] = gen
X = train.drop(["genre3","genre2","id","startYear","title","originalTitle","isAdult","runtimeMinutes","region","isOriginalTitle","numVotes","averageRating"],axis=1)#Columns that I've dropped
y = train.averageRating
reg.fit(X,y) #trying to fit
y_pred=reg.predict(test)
submission = pd.DataFrame()
submission["id"] = test["id"]
submission["averageRating"] = y_pred
submission.to_csv("submission.csv", index = None)#creating an submission in csv

Я ожидаю новый файл с именем "submission.csv "с результатами, но я получаю ошибку" ValueError: не удалось преобразовать строку в число с плавающей точкой: original_Title_of_a_movie_in_this_place ("originalTitle" из теста)".

Как сделатьЯ разрешаю ему использовать только жанры в тесте и не читать все столбцы. Должен ли я использовать падение в тестовых столбцах?

1 Ответ

0 голосов
/ 05 октября 2019

В вашем коде что-то отсутствует.

X содержит только одно значение, а также y.

Далее, test - матрица [1,12],Внутри test у вас есть строка из заголовка.

Это вызывает ошибку

In [18]: print X
   genre1
0       1

In [19]: print y
0    1.0
Name: averageRating, dtype: float64

In [20]: print test
      id  startYear              title  ... region  isOriginalTitle  numVotes
0  34325     1942.0  Que viene el coco  ...     ES              0.0     682.0

[1 rows x 12 columns]
...