Я не уверен, связана ли проблема с моими моделями оценки регрессии или с моим пониманием того, что на самом деле означает мера соответствия r ^ 2. Я работаю над проектом с использованием scikit learn и ~ 11 различных регрессионных оценок, чтобы получить (грубые!) Прогнозы производительности бейсбольных фантазий. Некоторые модели всегда работают лучше, чем другие (регрессия дерева решений и регрессия дополнительных деревьев дают худшие оценки r ^ 2, в то время как ElasticCV и LassoCV дают лучшие оценки r ^ 2, и время от времени может даже быть немного положительным числом!).
Если горизонтальная линия дает оценку r ^ 2, равную 0, то даже если все мои модели оказались бесполезными и буквально имеют нулевое прогностическое значение, и выкладывают числа совершенно случайно, разве я не должен получить небольшие положительные числа для г ^ 2 иногда, если от чистой глупой удачи в одиночку? 8 из 11 оценщиков, которые я использую, несмотря на то, что сотни раз перебирали разные наборы данных, ни разу не дали даже крошечного положительного числа для r ^ 2.
Неужели я не понимаю, как работает r ^ 2?
Я не переключаю порядок в функции склеарна .score. Я дважды проверил это много раз. Когда я неправильно выставляю порядок y_pred, y_true, он выдает r ^ 2 значения, которые являются чрезвычайно отрицательными (например, <-50 big) </p>
Тот факт, что это так, на самом деле еще больше усугубляет мое замешательство в отношении того, как г ^ 2 здесь является мерой приспособленности, но я отступаю ...
## I don't know whether I'm supposed to include my df4 or even a
##sample, but suffice to say here is just a single row to show what
##kind of data we have. It is all normalized and/or zscore'd
"""
>> print(df4.head(1))
HomeAway ParkFactor Salary HandedVs Hand oppoBullpen \
Points
3.0 1.0 -1.229 -0.122111 1.0 0.0 -0.90331
RibRunHistory BibTibHistory GrabBagHistory oppoTotesRank \
Points
3.0 0.964943 0.806874 -0.224993 -0.846859
oppoSwipesRank oppoWalksRank Temp Precip WindSpeed \
Points
3.0 -1.40371 -1.159115 -0.665324 -0.380048 -0.365671
WindDirection oppoPositFantasy oppoFantasy
Points
3.0 0.229944 -1.011505 0.919269
"""
def ElasticNetValidation(df4):
X = df4.values
y = df4.index
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
ENTrain = ElasticNetCV(cv=20)
ENTrain.fit(X_train, y_train)
y_pred = ENTrain.predict(X_test)
EN = ElasticNetCV(cv=20)
ENModel = EN.fit(X, y)
print('ElasticNet R^2: ' + str(r2_score(y_test, y_pred)))
scores = cross_val_score(ENModel, X, y, cv=20)
print("ElasticNet Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
return ENModel
Когда я запускаю этот оценщик, наряду с десятью другими оценками регрессии, с которыми я экспериментировал, я получаю и r2_score (), и cross_val_score (). Mean (), показывающие отрицательные числа почти каждый раз. Определенные оценки ВСЕГДА дают отрицательные оценки, которые даже не близки к нулю (регрессор дерева решений, регрессор дополнительного дерева). Некоторые оценщики работают лучше и даже иногда дают крошечный положительный балл, но не более 0,01, и даже те оценки (asticCV, lassoCV, linearRegression) в большинстве случаев являются отрицательными, хотя и лишь слегка отрицательными.
Даже если эти модели, которые я строю, ужасны. Да, они абсолютно случайны и не имеют никакой предсказательной силы, когда дело доходит до цели: разве это не должно предсказывать лучше, чем простая горизонтальная линия, так часто, как нет? Как получается, что несвязанная модель так последовательно предсказывает БЕДНОСТЬ, чем горизонтальную линию?