Низкий балл в линейной регрессии с дискретными атрибутами - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь сделать линейную регрессию в моем фрейме данных. Фрейм данных о приложениях Apple, и я хочу предсказать заметки приложений. Примечания в следующем формате:

1.0
1.5
2.0
2.5
...
5.0

Мой код:

atributos = ['size_bytes','price','rating_count_tot','cont_rating','sup_devices_num','num_screenshots','num_lang','vpp_lic']
atrib_prev = ['nota']

X = np.array(data_regress.drop(['nota'],1))
y = np.array(data_regress['nota'])

X = preprocessing.scale(X)

X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.2)

clf = LinearRegression()
clf.fit(X_train, y_train)

accuracy = clf.score(X_test, y_test)

print(accuracy)

Но моя точность равна 0,046295306696438665. Я думаю, что это происходит потому, что линейная модель предсказывает реальные значения, в то время как моя «записка» реальна, но с интервалами. Я не знаю, как округлить эти значения до clf.score.

1 Ответ

0 голосов
/ 14 ноября 2018

Во-первых, для регрессионных моделей clf.score() вычисляет R-квадрат , а не точность.Поэтому вам нужно решить, хотите ли вы рассматривать эту проблему как проблему классификации (для некоторого фиксированного числа целевых меток) или как проблему регрессии (для реальной стоимости цели)

Во-вторых, если вы настаиваете наиспользуя регрессионные модели, а не классификацию, вы можете вызвать clf.predict(), чтобы сначала получить прогнозируемые значения, а затем округлить, как вы хотите, а затем вызвать r2_score() для фактических и прогнозируемых меток.Что-то вроде:

# Get actual predictions
y_pred = clf.predict(X_test)

# You will need to implement the round function yourself
y_pred_rounded = round(y_pred)

# Call the appropriate scorer
score = r2_score(y_test, y_pred_rounded)

Вы можете посмотреть документацию sklearn здесь для доступных метрик в sklearn.

...