采用线性回归对波士顿房价数据集进行建模

特征变换:

1y=df[‘sales’]
2X=df.drop([‘sales’,‘Unnamed:0’],axis=1)

随机选择其中80%的样本作为训练数据,其余20%的数据作为测试样本
3X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2)

用训练数据训练最小二乘线性回归(无正则)、岭回归(L2正则)和Lasso(L1正则),注意岭回归和Lasso的正则超参数调优,性能指标为RMSE:

比较上述三种模型得到的各特征的回归系数,以及各模型在测试集上的性能。

回归系数:岭回归、Lasso得到的回归系数绝对值均比最小二乘线性回归小,即起到了权值收缩的效果(不全,具体回归系数分析看P36页最上行)
性能:最小二乘线性回归在训练集上的性能最好,但在测试集上的性能最差;Lasso模型在测试集上的性能最好

4# 导入pandas工具包
5import pandas as pd
6# 读取数据
7dpath=“./data/”
8df=pd.read_csv(dpath+“Advertising.csv”)
9# 从原始数据中分离输入特征x和输出y
10y=df[‘sales’]
11X=df.drop([‘sales’,‘Unnamed:0’],axis=1)
12# 将数据分割为训练数据与测试数据,随机采样20%的数据构建测试样本,其余作为训练样本
13from sklearn.model_selection import train_test_split
14X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2)
15
16# 方法一:
17# 最小二乘线性回归
18from sklearn.linear_model import LinearRegression
19# (1)使用默认配置初始化学习器实例
20lr=LinearRegression()
21# (2)使用训练数据训练模型参数
22lr.fit(X_train,y_train)
23# (3)用训练好的模型对测试集进行预测
24y_test_pred_lr = lr.predict(X_test)
25y_train_pred_lr = lr.predict(X_train)
26# (4)性能评估,R方分数
27print(“The r2 score of LinearRegression on test is %f” % (r2_score(y_test, y_test_pred_lr)))
28print(“The r2 score of LinearRegression on train is %f” % (r2_score(y_train, y_train_pred_lr)))
29# (5)在训练集上观察预测残差的分布,看是否符合模型假设:噪声为0均值的高斯噪声
30res = y_train_pred_lr - y_train
31
32
33# 方法二:
34# L1正则的线性回归模型
35from sklearn.linear_model import LassoCV
36# (1)设置超参数搜索范围(默认超参数搜索范围)
37# 在LassoCV(alpha= )设置alpha的值
38# (2)生成LassoCV实例(用交叉验证确定最佳超参数)
39lasso=LassoCV()
40# (3)训练(内含CV)
41lasso.fit(X_train,y_train)
42# (4) 测试
43y_test_pred_lasso = lasso.predict(X_test)
44y_train_pred_lasso = lasso.predict(X_train)
45# (5)评估,使用r2_score评价模型在测试集和训练集上的性能
46print(“The r2 score of lasso on test is %f” % (r2_score(y_test, y_test_pred_lasso)))
47print(“The r2 score of lasso on train is %f” % (r2_score(y_train, y_train_pred_lasso)))
48#lasso.mese_path 每次交叉验证的均方误差,随着alpha值的变化,均方误差的变化曲线
49mses = np.mean(lasso.mse_path_, axis=1)
50
51# 方法三:
52# 岭回归的线性回归模型
53from sklearn.linear_model import Ridge
54# (1)设置超参数搜索范围(默认超参数搜索范围)
55# 在Ridge(alpha= )设置alpha的值
56# (2)生成Ridge实例
57ridg10=Ridge()
58# (3)训练(内含CV)
59ridg10.fit(X_train,y_train)

你可能感兴趣的:(线性回归,回归,机器学习)