Почему R2 отрицателен, хотя существует взаимосвязь? - PullRequest
2 голосов
/ 01 ноября 2019

Я новичок в ML, и я использую следующий код для определения RMSE & R2. Однако значение R2 отображается как: -43.13.

Я уже просмотрел несколько постов в Stackoverflow, в которых упоминалось значение отрицательного значения R2. Но из моего набора данных ясно, что по мере увеличения данных «сертификации» увеличивается и «зарплата». Так что между ними явно есть положительная корреляция. Тогда почему R2 отрицателен?

Certifications data: [ 2.  3.  5.  6.  7.  9. 10. 14.]

Salary data: [22000. 23000. 24000. 28000. 33000. 42000. 44000. 53000.]

model=LinearRegression()

certification_train,certification_test,salary_train,salary_test=train_test_split(certifications,salary,test_size=0.2)

model.fit(certification_train.reshape(-1,1), salary_train.reshape(-1,1))    

salary_prediction=model.predict(certification_test.reshape(-1,1))

print("R2:",r2_score(salary_test,salary_prediction))

1 Ответ

1 голос
/ 01 ноября 2019

Это связано с тем, что у вас действительно маленький размер выборки.

Когда я пытаюсь запустить ваш код, я получаю

R2: 0.9030842872008327

При таком маленьком размере выборки (2 образца в вашемнабор тестов (8 в вашем поезде), вы не можете ожидать, что модель будет работать хорошо, и то, насколько хорошо она работает, определяется в основном тем, какие образцы отправляются на train, а какие на test на train_test_split.

Попробуйте изменить train_test_split строку на

certification_train,certification_test,salary_train,salary_test=train_t
st_split(np.array(certifications),np.array(salary),test_size=0.2, random_state=1) 

и посмотрите, насколько сильно меняется ваш R2 в зависимости от выбранного случайного состояния!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...