Как подобрать модель линейной регрессии с использованием трех независимых переменных и рассчитать среднеквадратическую ошибку, используя sklearn?
Я пытаюсь подобрать модель линейной регрессии с использованием трех независимых переменных и вычислить среднеквадратическую ошибку, используя sklearn, но я, похоже, не смогу сделать это правильно.
Мои данные - это Бостонское жилье, и три независимых переменных таковы: 1. CRIM (уровень преступности на душу населения по городам) 2. RM (среднее количество комнат на одно жилье) 3. PTRATIO (соотношение учеников и учителей по городам)
Подходящая модель:
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import sklearn
lm = LinearRegression()
lm.fit(X[['CRIM']['RM'], ['PTRATIO']], boston_df.PRICE)
Рассчитать среднеквадратичную ошибку
from sklearn.metrics import mean_squared_error
y_true = ['CRIM', 'RM', 'PTRATIO']
y_pred = ['PRICE']
mean_squared_error(y_true, y_pred)
Любые советы или советы очень ценятся!
2 ответа
Пытаться X[['CRIM', 'RM', 'PRTATIO']]
вместо X[['CRIM']['RM'], ['PTRATIO']]
для подгонки модели
Для прогнозирования вам нужно сравнить эти два вектора:
y_true = boston_df.PRICE
y_pred = lm.predict(X[['CRIM', 'RM', 'PRTATIO']])
mean_squared_error(y_true, y_pred)
В основном ваш y_pred
должны быть предсказанные значения из вашей модели, которая lm
в этом случае.
Склеарн имеет отличную документацию. Вот очень подробный пример с полным набором данных: http://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html
Самая большая проблема, с которой вы столкнулись - это ваш набор данных. Понравился ваш код здесь:
y_true = ['CRIM', 'RM', 'PTRATIO']
y_pred = ['PRICE']
Это даже не реальные данные, это всего лишь 2 списка строковых меток, поэтому, конечно, это не сработает:
mean_squared_error(y_true, y_pred)
Из приведенного мною примера вы можете попробовать этот код типа "привет мир" (используя существующие наборы данных) просто для того, чтобы убедиться, что код работает, и все, что вам нужно сделать, это заменить набор данных своими собственными данными. Как видите, большая часть кода предназначена для подготовки данных, поэтому они будут корректно загружаться в функцию линейной регрессии:
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
# Load the diabetes dataset
diabetes = datasets.load_diabetes()
# Use only one feature
diabetes_X = diabetes.data[:, np.newaxis, 2]
# Split the data into training/testing sets
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
# Split the targets into training/testing sets
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]
# Create linear regression object
regr = linear_model.LinearRegression()
# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)
print("Mean squared error: %.2f" % np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2))