Python高级--boston房价预测

一、获取数据

1)导入数据

from sklearn.linear_model import LinearRegression,Lasso,Ridge
from sklearn.datasets import load_boston

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt

2)查看数据

df = DataFrame(boston.data,columns=boston.feature_names)

df.shape
(506, 13)   #450之前的 用来训练 之后的用来测试

3)处理数据

data = boston.data  # 样本的特征值
target = boston.target  # 样本的目标值
X_train = data[:450]
y_train = target[:450]
# 测试数据
X_test = data[450:]  # 测试数据的特征值
y_test = target[450:]  # 测试数据的结果

二、获取模型 训练模型

1)获取各个模型

lr = LinearRegression()
rr = Ridge()
lasso = Lasso()

2)训练各个模型

lr.fit(X_train,y_train)
rr.fit(X_train,y_train)
lasso.fit(X_train,y_train)

三、模型预测并绘图

1)模型预测

y_lr_ = lr.predict(X_test)
y_rr_ = rr.predict(X_test)
y_lasso_ = lasso.predict(X_test)

2)预测值与真实值的差异

plt.plot(y_test,label='real')
plt.plot(y_lr_,label='lr')
plt.plot(y_rr_,label='rr')
plt.plot(y_lasso_,label='lasso')
plt.legend() 

Python高级--boston房价预测_第1张图片

四、准查看确率

lr.score(X_test,y_test)

0.37669768810744486

回归问题不能只看准确率

五、研究 查尔斯河 与房价的 趋势关系

1)查看查尔斯河特征

df['CHAS'].unique()

array([0., 1.])

2)获取数据

因为我们这里只研究趋势,所以自己创建测试数据

1、获取数据

X_train = df['CHAS']  # 训练集的特征是 查尔斯河
y_train = target  # 训练集的结果值是 房价

2、分析数据绘制图形

plt.scatter(X_train,y_train)

Python高级--boston房价预测_第2张图片

我们从肉眼就可以看出,查尔斯河的房价没有特别低的。

3)模型分析

1、获取模型

lr = LinearRegression()
rr = Ridge()
lasso = Lasso()

2、训练数据

这里的X_train目前是从DataFrame里面取出来的一列,在训练时需要将数据转换为 n行 1 列的数据

X_train.values.reshape(-1,1)
lr.fit(X_train.values.reshape(-1,1),y_train)
rr.fit(X_train.values.reshape(-1,1),y_train)
lasso.fit(X_train.values.reshape(-1,1),y_train)

3、创建测试数据并预测

X_test = np.arange(0,1.1,0.1)  #从0-1.1每隔0.1取一个
y_lr_ = lr.predict(X_test.reshape(-1,1))
y_rr_ = rr.predict(X_test.reshape(-1,1))
y_lasso_ = lasso.predict(X_test.reshape(-1,1))

4、绘制测试结果

plt.scatter(X_train,y_train)
plt.plot(X_test,y_lr_,label='lr')
plt.plot(X_test,y_rr_,label='rr')
plt.plot(X_test,y_lasso_,label='lasso')
plt.legend()

Python高级--boston房价预测_第3张图片

六、模型分析

根据画的线可以看出

普通线型回归与岭回归基本形同

lasso因为去掉了一些权重因而预测结果不明显。

你可能感兴趣的:(线性回归)