Как подобрать модель линейной регрессии с использованием трех независимых переменных и рассчитать среднеквадратическую ошибку, используя 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))
Другие вопросы по тегам