一、获取数据
1)导入数据
from sklearn.linear_model import LinearRegression,Lasso,Ridge
from sklearn.datasets import load_bostonimport 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()
四、准查看确率
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)
我们从肉眼就可以看出,查尔斯河的房价没有特别低的。
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()
六、模型分析
根据画的线可以看出
普通线型回归与岭回归基本形同
lasso因为去掉了一些权重因而预测结果不明显。