1、第5章 回归主要内容 一元线性回归 多元线性回归 梯度下降法 Logistic回归3房屋应用做一个房屋价值的评估系统,一个房屋的价值来自很多地方,比如说面积、房间的数量(几室几厅)、地段、朝向等等,这些影响房屋价值的变量被称为特征(feature)。在此处,为了简单,假设我们的房屋就是一个变量影响的,就是房屋的面积。假设有一个房屋销售的数据如下:4线性回归及其模型线性回归,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。其表达形式为 y=wx+e,e为误差服从均值为0的正态分布。wj是系数,W就是这个系数组成的向量,它影响着不同维度的j(x)在回归函数
2、中的影响度,比如说对于房屋的售价来说,房间朝向的w一定比房间面积的w更小。(x)可以换成不同的函数,不一定要求(x)=x假设特征和结果都满足线性。收集的数据中,每一个分量,就可以看做一个特征数据。每个特征至少对应一个未知的参数。这样就形成了一个线性模型函数,向量表示形式:5回归问题的常规步骤p 寻找模型函数;p 构造J函数(损失函数);p 最小化J函数并求得回归参数(w)6线性回归的损失函数误差最小。模型与数据差的平方和最小:最小二乘法梯度下降法模型函数:损失函数7线性回归的两个用途p 如果目标是预测或者映射,线性回归可以用来对观测数据集的和X的值拟合出一个预测模型。当完成这样一个模型以后,对
3、于一个新增的X值,在没有给定与它相配对的y的情况下,可以用这个拟合过的模型预测出一个y值。这是比方差分析进一步的作用,就是根据现在,预测未来。虽然,线性回归和方差都是需要因变量为连续变量,自变量为分类变量,自变量可以有一个或者多个,但是,线性回归增加另一个功能,也就是凭什么预测未来,就是凭回归方程。这个回归方程的因变量是一个未知数,也是一个估计数,虽然估计,但是,只要有规律,就能预测未来。p 给定一个变量y和一些变量X1,.,Xp,这些变量有可能与y相关,线性回归分析可以用来量化y与Xj之间相关性的强度,评估出与y不相关的Xj,并识别出哪些Xj的子集包含了关于y的冗余信息。一元线性回归 回归是
4、一种监督学习模型,用于估计一个预测值(又称为因变量、响应变量)和一个或多个特征(又称为自变量)之间关系。最常见的回归方法有线性回归和Logistic回归等。如果特征和预测值之间存在线性关系,利用观测到的特征数据和预测值建立它们之间的线性模型的过程就是线性回归。如果特征只有一个,那么就叫一元线性回归,又叫简单线性回归。一元线性回归 线性关系 物质的体积和质量、父子的身高、房子的房间数和价格、披萨的直径和价格等等之间都在一定程度上存在线性关系。当获取到一组(特征,预测值)数据时,可以通过可视化来直观地确定它们之间是否存在线性关系。一元线性回归 线性关系 平均房间数和房价之间的线性关系from sk
5、learn.datasets import load_boston#导入波士顿房价数据集import matplotlib.pyplot as pltdataset=load_boston()x_data=dataset.data#导入所有特征变量y_data=dataset.target#导入目标值(房价)name_data=dataset.feature_names#导入特征名plt.subplot(1,1,1)#绘制房间数和房价的散点图plt.scatter(x_data:,5,y_data,s=20)#第5个特征为为房间数plt.title(name_data5)plt.show()一
6、元线性回归一元线性回归 一元线性回归 利用Sklearn实现一元线性回归 导入数据集 导入线性回归类 导入数据集处理方法 导入可视化包from sklearn.datasets import load_bostonfrom sklearn.linear_model import LinearRegressionfrom sklearn.model_selection import train_test_splitimport matplotlib.pyplot as plt一元线性回归 一元线性回归 利用Sklearn实现一元线性回归 数据准备dataset=load_boston()x_da
7、ta=dataset.data#导入所有特征变量y_data=dataset.target#导入目标值(房价)name_data=dataset.feature_names#导入特征 x_train,x_test,y_train,y_test=train_test_split(x_data,y_data,test_size=0.25,random_state=1001)x_data_train=x_train:,5.reshape(-1,1)#选取前400个样本作为训练集y_data_train=y_train.reshape(-1,1)x_data_test=x_test:,5.reshap
8、e(-1,1)#选取剩余的样本作为训练集y_data_test=y_test.reshape(-1,1)一元线性回归 一元线性回归 利用Sklearn实现一元线性回归 包括线性回归在内的机器学习都包含训练(或学习)和预测两个过程。fit()方法用于学习模型。predict()函数利用学习到的模型来预测一个自变量对应的因变量值。训练和预测simple_model=LinearRegression()#创建线性回归估计器实例simple_model.fit(x_data_train,y_data_train)#用训练数据拟合模型y_data_test_p=simple_model.predict(
9、x_data_test)#用训练的模型对测试集进行预测 一元线性回归 一元线性回归 利用Sklearn实现一元线性回归 预测结果输出 模型结果plt.subplot(1,1,1)plt.scatter(x_data_test,y_data_test,s=20,color=r)plt.scatter(x_data_test,y_data_test_p,s=20,color=b)plt.xlabel(Room Number)plt.ylabel(Price)plt.title(name_data5)plt.show()In 2:simple_model.coef_Out2:array(9.0186
10、7888)In 3:simple_model.intercept_Out3:array(-34.20143988)模型的回归系数coef_和截距intercept_,分别为9.02和-34.20。一元线性回归一元线性回归 模型工作原理 方差用来衡量一组值的偏离程度。协方差用来衡量两个变量如何一起变化。一元线性回归 模型工作原理 代价函数 代价函数极小时一元线性回归一元线性回归r_squared=simple_model.score(x_data_test,y_data_test)print(R2=%s%r_squared)r_squaredOut2:0.46561991850703266多元线
11、性回归多元线性回归多元线性回归 利用Sklearn实现多元线性回归dataset=load_boston()x_data=dataset.data#导入所有特征变量y_data=dataset.target#导入目标值(房价)name_data=dataset.feature_names#导入特征#随机选取训练机和测试集x_train,x_test,y_train,y_test=train_test_split(x_data,y_data,test_size=0.25,random_state=1001)mlr_model=LinearRegression()#创建线性回归估计器实例mlr_m
12、odel.fit(x_train,y_train)#用训练数据拟合模型y_test_p=mlr_model.predict(x_test)#用训练的模型对测试集进行预测多元线性回归plt.subplot(1,1,1)plt.scatter(x_test:,5,y_test,s=20,color=r)plt.scatter(x_test:,5,y_test_p,s=20,color=b)plt.xlabel(Room Number)plt.ylabel(Price)plt.title(name_data5)plt.show()r_squared=mlr_model.score(x_test,y_
13、test)print(R2=%s%r_squared)梯度下降梯度下降梯度下降基于梯度下降法的多元线性回归 code-5-5.py#SGD Multiple Linear Regression from sklearn.datasets import load_boston from sklearn.preprocessing import StandardScaler from sklearn.linear_model import SGDRegressor import matplotlib.pyplot as plt from sklearn.model_selection import
14、 train_test_split dataset=load_boston()x_data=dataset.data#导入所有特征变量 y_data=dataset.target#导入目标值(房价)name_data=dataset.feature_names#导入特征 x_train,x_test,y_train,y_test=train_test_split(x_data,y_data,test_size=0.25,random_state=1001)基于梯度下降法的多元线性回归#分别初始化对特征和目标值的标准化器 sc_X=StandardScaler()sc_y=StandardSca
15、ler()#分别对训练和测试数据的特征以及目标值进行标准化处理 x_train=sc_X.fit_transform(x_train)x_test=sc_X.transform(x_test)y_train=sc_y.fit_transform(y_train.reshape(-1,1)y_test=sc_y.transform(y_test.reshape(-1,1)基于梯度下降法的多元线性回归#创建回归估计器实例,并选择残差平方和作为代价函数 Sklearn提供的SGDRegressor类就是基于随机梯度下降的多元线性回归方法的一个实现 sgd_model=SGDRegressor(los
16、s=squared_loss)sgd_model.fit(x_train,y_train)#用训练数据拟合模型 y_test_p=sgd_model.predict(x_test)#用训练的模型对测试集进行预测 r_squared=sgd_model.score(x_test,y_test)print(R2=%s%r_squared)基于梯度下降法的多元线性回归#绘图 plt.subplot(1,1,1)y_test_p=sc_y.inverse_transform(y_test_p)y_test=sc_y.inverse_transform(y_test)plt.scatter(x_test
17、:,5,y_test_p,s=20,color=b,marker=s)plt.scatter(x_test:,5,y_test,s=20,color=r,marker=x)plt.xlabel(Room Number)plt.ylabel(Price)plt.title(name_data5)plt.show()32逻辑回归Logistic回归与多重线性回归实际上有很多相同之处,最大的区别就在于它们的因变量不同,其他的基本都差不多。正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalizedlinear model)。Logistic回归主要在流行病学中应用较多,比较常用
18、的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率,等等。例如,想探讨胃癌发生的危险因素,可以选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群肯定有不同的体征和生活方式等。这里的因变量就是是否胃癌,即“是”或“否”,自变量就可以包括很多了,例如年龄、性别、饮食习惯、幽门螺杆菌感染等。自变量既可以是连续的,也可以是分类的。33逻辑回归的IIA效应逻辑回归的“Independent and irrelevant alternatives”假设,也称作“IIA效应”,指Logit模型中的各个可选项是独立的不相关的。如:市场上有A,B,C三个商品相互竞争,分别占有市场份额:60%,30
19、%和10%,三者比例为:6:3:1一个新产品D引入市场,有能力占有20%的市场如果满足IIA假设,各个产品独立作用,互不关联:新产品D占有20%的市场份额,剩下的80%在A、B、C之间按照6:3:1的比例瓜分,分别占有48%,24%和8%。如果不满足IIA假设,比如新产品D跟产品B几乎相同,则新产品D跟产品B严重相关:新产品D夺去产品B的部分市场,占有总份额的20%,产品B占有剩余的10%,而产品A和C的市场份额保持60%和10%不变。Logistic回归 当因变量是离散的(比如好与坏、男与女等,输出仅有两个值,可以设置为0和1)时,问题变为一种二元分类问题,可以用Logistic回归来解决。
20、Logistic回归模型是一种广义线性回归模型。Logistic回归Logistic回归 选择Sigmoid函数作为联系函数 Logistic回归模型 或Logistic回归Logistic回归Logistic回归 Logistic回归应用 利用 Sklearn包的LogisticRegression类实现了Logistic回归 数据集:内置的cancer数据集,包含了威斯康辛州记录的569个病人的乳腺癌恶性/良性(1/0)类别型数据(训练目标),以及与之对应的30个维度的生理指标数据。from sklearn.datasets import load_breast_cancer from s
21、klearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import classification_report from sklearn.metrics import accuracy_score,confusion_matrixLogistic回归 Logistic回归应用#数据加载和分割cancer=load_breast_cancer()X=cancer.datay=cancer.targetX_train,
22、X_test,Y_train,Y_test=train_test_split(X,y,test_size=.25,random_state=0)#逻辑回归模型定义logisticRegr=LogisticRegression()#模型训练logisticRegr.fit(X_train,Y_train)#模型预测predictions=logisticRegr.predict(X_test)#计算精度score=logisticRegr.score(X_test,Y_test)#结果输出print Accuracy:,scoreprint(classification_report(Y_tes
23、t,predictions)Logistic回归 模型评价 分类可以用准确率描述分类器预测正确的比例。分类问题还关心把阴性错分为阳性、把阳性错分为阴性的情形,这可以用混淆矩阵表示。In 114:from sklearn.metrics import confusion_matrixIn 115:print(confusion_matrix(Y_test,predictions)52 1 5 85In 116:import matplotlib.pyplot as plt .:plt.matshow(confusion_matrix(Y_test,predictions).:plt.title(confusion matrix).:plt.colorbar().:plt.xlabel(True label).:plt.ylabel(Predocted label).:plt.show().: