1、第3章 线性回归:预测未来趋势课后习题答案一、考考你1.下列哪一项 C 不是机器学习必备的一个要素。A.样本数据B.模型C.目标标签D.算法2.监督学习与无监督学习最大的区别是 D 。A.先验知识B.学习算法C.学习方法D.有无标签3.线性回归模型要解决的问题是 D 。A.找到自变量与因变量之间的函数关系B.模拟样本数据曲线C.数据与时间的变化关系D.尽量用一条直线去拟合样本数据4.梯度下降法的目标是 B 。A.尽快完成模型训练B.寻找损失函数的最小值C.提供算法效率D.提高模型性能5.哪一项 D 不是DataFrame在数据处理方面广泛应用的主要优势。A.支持多类型数据B.检索数据灵活C.修
2、改数据方便D.优于矩阵运算二、亮一亮1.采用哪些方案可有效提高预测房屋价格模型的质量,请尝试并验证你的想法。参考答案:可以考虑采用以下措施:(1)增加模型训练样本的规模;(2)增加描述房屋的特征维度;(3)尝试调节模型参数。2.为什么要进行模型的训练、测试和评价?请讨论并阐述你的理由。参考答案:你可以把机器想象成一个小孩子,你带小孩去动物园玩,去认识动物园里的很多动物。简单起见,我们先考虑二元分类问题,你告诉小孩这个动物是狗,那个也是狗。但突然一只猫跑过来,你告诉他,这个不是狗而是猫,久而久之,小孩就会产生认知模式,这个学习过程就叫“训练”,所形成的认知模式就是“模型”。多次训练之后,若这时再
3、跑过来一个动物,你问小孩,这个是狗吗?他回答是或否,这个就叫“测试”,而小孩不一定每次都能正确识别你指向的动物,因此你需要评估这个训练的模型的有效性,并不断纠正小孩的错误回答,强化这个训练的模型有效性,这个就叫“评价”。由以上分析不难看出,我们只有训练出模型并经过大量样本的测试,经评价指标的评判证明了这个模型的有效性后,才可以真正将这个模型应用于生活和工作中的实用场景。三、帮帮我1.请尝试采用随机梯度下降回归SGDRegressor模型来预测投保人医疗费用,将预测效果与案例2进行对比。提示:用以下语句导入SGDRegressor类。from sklearn.linear_model impor
4、t SGDRegressor参考答案:# 用随机梯度下降回归SGDRegressor模型预测医疗费用%matplotlib inlineimport numpy as npimport pandas as pd import matplotlib.pyplot as pltfrom sklearn.linear_model import SGDRegressorfrom sklearn.preprocessing import MinMaxScalerimport joblibfrom sklearn.model_selection import train_test_split#数据的加载与
5、处理df=pd.read_csv(datainsurance.csv,header=0)df.locdfsex=female,sex=0df.locdfsex=male,sex=1df.locdfsmoker=yes,smoker=1df.locdfsmoker=no,smoker=0df.locdfregion=southwest,region=1df.locdfregion=southeast,region=2df.locdfregion=northwest,region=3df.locdfregion=northeast,region=4scaler=MinMaxScaler()scal
6、er.fit(df)sample_data=scaler.transform(df)train_data=sample_data:,0,1,2,3,4,5train_target=sample_data:,6x_train,x_test,y_train,y_test=train_test_split(train_data,train_target,test_size=0.3)#训练模型和输出训练结果model= SGDRegressor()model.fit(x_train,y_train)score=model.score(x_test,y_test)intercept=model.inte
7、rcept_coef=model.coef_print(coef)print(模型准确性得分%.3f%score)func_LR=y=%.6f%interceptfor i in range(0,coef.size): func_LR+=(%+.6fx%d%(coefi,i)print(func_LR)运行结果:#绘制拟合曲线y_pred=model.predict(x_test)plt.rcParamsfont.sans-serif = SimHeiplt.figure(figsize=(8,4)plt.plot(y_test,y_pred,og,label=真实值vs预测试)plt.plot(y_test,y_test,r,label=真实值)plt.xlabel(真实值)plt.ylabel(预测值)plt.legend(loc=upper left)运行结果: