#python #machine-learning #scikit-learn #regression #mean-square-error
Вопрос:
Я сделал линейную регрессию с помощью scikit learn
когда я вижу свою среднеквадратичную ошибку в тестовых данных, она очень низкая (0,09).
когда я вижу свой рейтинг r2_ в своих тестовых данных, он также очень мал (0,05)
согласно тому, что я знаю, когда среднеквадратичная ошибка невелика, нынешняя модель хороша, но r2_score очень меньше, что говорит нам о том, что модель не очень хороша
Я не понимаю, хороша моя регрессионная модель или нет
Может ли хорошая модель иметь низкое значение квадрата R или плохая модель может иметь низкое значение среднеквадратичной ошибки?
Ответ №1:
R^2-это показатель того, насколько хорошо вы подходите для представления данных.
Допустим, ваши данные имеют линейный тренд и некоторый шум на нем. Мы можем построить данные и посмотреть, как меняется R^2:
Данные
Я собираюсь создать некоторые данные, используя numpy
:
xs = np.random.randint(10, 1000, 2000) ys = (3 * xs 8) np.random.randint(5, 10, 2000)
В форме
Теперь мы можем создать подходящий объект с помощью scikit
reg = LinearRegression().fit(xs.reshape(-1, 1), ys.reshape(-1, 1))
И мы можем получить оценку по этой подгонке.
reg.score(xs.reshape(-1, 1), ys.reshape(-1, 1))
Мой R^2 был: 0.9999971914416896
Неверные данные
Допустим, у нас есть набор более разрозненных данных (в нем больше шума).
ys2 = (3 * xs 8) np.random.randint(500, 1000, 2000)
Теперь мы можем рассчитать оценку ys2
, чтобы понять, насколько хорошо наши xs
данные соответствуют ys2
:
reg.score(xs.reshape(-1, 1), ys2.reshape(-1, 1))
Мой R^2 был: 0.2377175028951054
Оценка низкая. мы знаем, что тенденция данных не изменилась. Это все еще 3x 8 (шум). Но ys2
находятся дальше от подходящего.
Итак, R^2-это показатель того, насколько хорошо ваша подгонка отражает данные. Но важно состояние самих данных. Возможно, даже с низким баллом вы получите наилучшую возможную подгонку. Так как данные рассеиваются из-за шума.