2017-02-23 11 views
1

Я пытаюсь подгонять модель линейной регрессии с использованием трех независимых переменных и вычислять среднюю квадратичную ошибку с использованием sklearn, но, похоже, я не могу ее правильно понять.Как подобрать модель линейной регрессии с использованием трех независимых переменных и вычислить среднюю квадратичную ошибку с использованием sklearn?

Мои данные Бостон жилищного строительства, и три независимые переменные следующим образом: 1. CRIM (на душу населения уровень преступности по городу) 2. РМ (среднее количество комнат в жилище) 3. PTRATIO (pupil- соотношение учителей по городу)

Подходящая модель:

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) 

Любые советы или подсказки очень ценятся!

+0

Что происходит? Вы забыли упомянуть, в чем проблема – iled

+0

Я не могу подогнать модель линейной регрессии и вычислить среднюю квадратную ошибку. Спасибо за ваш ответ!! –

+0

Я имею ввиду, отправьте сообщение об ошибке – iled

ответ

0

Попробуйте 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 в этом дело.

+0

Амир, спасибо вам большое !!! –

0

sklearn имеет отличную документацию. Вот подробный пример с набором примеров: 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) 

Из примера я отправил , вы можете попробовать этот код типа «hello world» (используя существующие наборы данных), чтобы убедиться, что вы получаете код, но все, что вам нужно сделать, это заменить набор данных своими данными. Как вы можете видеть, большая часть кода предназначена для подготовки данных, поэтому он правильно загружается в функцию линейной регрессии:

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)) 
+0

Awesome !! Большое спасибо!!! –

+0

В этом случае вы разделите набор данных, но имеет смысл делать что-то вроде 'regr = linear_model.LinearRegression()' then 'regr.fit (diabetes_X, diabetes.target)', а затем, наконец, 'np.mean ((regr .predict (диабет_X, diabetes.target) ** 2) '? Было бы это иметь смысл? Потому что я хотел бы видеть, насколько хорошо подходит с точки зрения ошибки. Поэтому я подумал, что могу использовать один и тот же набор данных ... Это хороший подход? –

+1

@Euler_Salter, вообще говоря, если вы используете одни и те же данные для обучения модели, а затем тестируете модель, то вы на самом деле ничего не предсказываете, так как модель уже «знает» правильный ответ для каждого входа, поэтому делать это не так иметь смысл. Хотя вы можете попробовать, конечно, сделать снимок. Поскольку это линейная регрессия, в зависимости от ваших данных, она, вероятно, не сможет сделать идеальные прогнозы. Также дважды проверьте среднюю квадратную строку ошибки из моего примера, вы, похоже, неправильно ее описали. –

Смежные вопросы