P96思考与练习1
1. 延续回归模型的性能评估,计算使用全部数据学习得到的回归模型linreg在测试集上的性能,与只使用训练集的模型linregTr进行比较,并对结果进行分析。
#1
#模型linreg
import pandas as pd
data = pd.read_csv('data/advertising.csv',index_col = 0)
x = data.iloc[: ,0:3].values.astype(float)
y = data.iloc[: ,3].values.astype(float)
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
linreg.fit(x,y)
print(linreg.intercept_,linreg.coef_)
#模型linregTr
from sklearn import model_selection
x_train,x_test,y_train,y_test = model_selection.train_test_split(x,y,test_size = 0.35,random_state = 1)
linregTr = LinearRegression()
linregTr.fit(x_train,y_train)
print(linregTr.intercept_,linregTr.coef_)
#将模型linregTr运用到测试集
from sklearn import metrics
y_test_pred1 = linregTr.predict(x_test)
test_err1 = metrics.mean_squared_error(y_test,y_test_pred1)
print('The mean squar error of test are:{:.3f}'.format(test_err1))
predict_score1 = linregTr.score(x_test,y_test)
print('The decision coeficient is:{:.3f}'.format(predict_score1))
#将模型linreg运用到测试集
y_test_pred2 = linreg.predict(x_test)
test_err2 = metrics.mean_squared_error(y_test,y_test_pred2)
print('The mean squar error of test are:{:.3f}'.format(test_err2))
predict_score2 = linreg.score(x_test,y_test)
print('The decision coeficient is:{:.3f}'.format(predict_score2))
分析:使用全部数据学习得出的回归模型linreg在测试集上的决定系数为0.916,大于只使用训练集的模型linregTr的决定系数0.913。由于决定系数越大,预测效果越好。所以回归模型linreg在测试集上的预测效果要好些。
2. 从例5-2训练集中取出前100条、200条样本,学习得到回归模型,在测试集上计算这些模型的预测性能,并进行分析比较。(第2道题目有些歧义,样本总共就200条,例5-2中的训练集也不过是130条,从130条中取200条?。所以第2题按照老书第一版的描述来:
从例5-1中取出前100条样本,学习回归模型linregHalf;在练习1的测试集上计算该模型预测性能,并与使用200条样本学习的模型比较。)
#2
#此处仅取出前100条样本,前200条样本即是全部的样本数,在第1题中已计算过
import pandas as pd
data = pd.read_csv('data/advertising.csv',index_col = 0)
x1 = data.iloc[:100,0:3]
y1 = data.iloc[:100,3]
from sklearn.linear_model import LinearRegression
linregHalf = LinearRegression()
linregHalf.fit(x1,y1)
print(linregHalf.intercept_,linregHalf.coef_)
#将模型linregHalf运用到测试集
y_test_pred3 = linregHalf.predict(x_test)
test_err3 = metrics.mean_squared_error(y_test,y_test_pred3)
print('The mean squar error of test are:{:.3f}'.format(test_err3))
predict_score3 = linregHalf.score(x_test,y_test)
print('The decision coeficient is:{:.3f}'.format(predict_score3))
分析: 由练习1可知,200条样本学习的模型在测试集上的决定系数为0.916,而模型linregHalf的为0.915,决定系数高的预测效果要好,所以200条数据的模型在测试集上的预测效果较好一些,差别不大,预测效果基本相同。