线性模型(关系)
最小二乘法
正则化
代码实现
模型性能评估
过拟合和欠拟合
岭回归
逻辑回归
癌症分类案例
分类评估方法
ROC曲线和AUC指标
模型的保存和加载
无监督学习K-means算法
如何对聚类结果进行评估——轮廓系数
线性回归1.线性回归的原理
回归方程对一个或者多个自变量和因变量之间关系进行建模的一种分析方式
线性模型(关系)y=w1x1+w2x2+w3x3...+b
只有一个变量的情况,称为单变量回归;多个自变量情况叫做多元回归。
线性模型不一定都是指这样的直线,也可以是弯的。
因为广义线性模型的定义:
1.自变量是一次方(这个是线性模型,线性关系)Y=w1x1+w2x2+w3x3+...+wnxn+b
2.参数是一次方,参数w是一次,这个是线性模型,但不是线性关系。因为他的图形形状不是直线。Y=w1x1+w2x1^2+w3x1^3...+b
线性关系线性模型
线性关系一定是线性模型
线性模型不一定是线性关系
(可以这么理解,模型的范围关系)
最小二乘法如何去找到合适的线性模型去表示?目标:找到合适的参数使得模型预测准确(如何能够找到合适的模型?————损失函数)
线性模型中,比较参数的好坏应该是看点到线性方程的距离.如下图所示,我们根据点到直线的距离作为依据,然后判断这个参数的好坏。
这个距离指标称为:损失函数/cost/成本函数/目标函数
h(x_i)第i个训练样本特征值组合预测函数
y_i第i个训练样本数据的真实值
式子也被称为最小二乘法,因为我们需要去找到使得这个损失函数最小的w,因为这个式子有平方,因此我们称这个式子为最小二乘法。
正则化我们知道了指标,具体要怎么做?如何优化1.正则方程
一步到位,X为特征值矩阵,y为目标值矩阵。
缺点:当特征值过于复杂的时候,因为有求逆的步骤,所以求解的速度很慢。并且可能预测效果没有很好。
2.梯度下降
代码实现API:
一:正则化方法进行线性回归
Sklearn.linear_model.LinearRegression(fit_intercept=True)fit_intercept=True是否添加偏置,一般为True,不然回归方程方程只能是通过原点的函数
通过正则方程优化LinearRegreesion.coef_回归系数LinearRegression.intercept_偏置步骤:
获取数据划分数据集标准化预估器得出模型模型评估deflinear1():"""正规方程的优化方法对波士顿房价进行预测:return:"""#1)获取数据boston=load_boston()#2)划分数据集x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,random_state=22)#3)标准化transfer=StandardScaler()x_train=transfer.fit_transform(x_train)x_test=transfer.transform(x_test)#4)预估器estimator=LinearRegression()estimator.fit(x_train,y_train)#5)得出模型print("正规方程-权重系数为:\n",estimator.coef_)print("正规方程-偏置为:\n",estimator.intercept_)#6)模型评估y_predict=estimator.predict(x_test)print("预测房价:\n",y_predict)error=mean_squared_error(y_test,y_predict)print("正规方程-均方误差为:\n",error)returnNone
特征有几个,权重系数就有多少个。
二:梯度下降
deflinear2():"""梯度下降的优化方法对波士顿房价进行预测:return:"""#1)获取数据boston=load_boston()print("特征数量:\n",boston.data.shape)#2)划分数据集x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,random_state=22)#3)标准化transfer=StandardScaler()x_train=transfer.fit_transform(x_train)x_test=transfer.transform(x_test)#4)预估器#learning_rate这个参数来选择学习率调整使用什么方法,因为我们希望在斜率大的地方,学习率大点,斜率小的地方,学习率小点。eta0是学习率的初始值。max_iter最大的迭代次数;为了防止过拟合,penalty惩罚项系数。estimator=SGDRegressor(learning_rate="constant",eta0=0.01,max_iter=,penalty="l1")estimator.fit(x_train,y_train)#5)得出模型print("梯度下降-权重系数为:\n",estimator.coef_)print("梯度下降-偏置为:\n",estimator.intercept_)#6)模型评估y_predict=estimator.predict(x_test)print("预测房价:\n",y_predict)error=mean_squared_error(y_test,y_predict)print("梯度下降-均方误差为:\n",error)returnNone模型性能评估
如何评估一个线性回归方程的性能:指标:均方误差MSE
和损失函数差不多,就是这个有求一个平均。
梯度下降法和正则法的对比
梯度下降正规方程需要选择学习率不需要需要迭代求解一次运算得出特征数量较大可以使用需要计算方程,如果特征数量大的画,时间复杂度高能够解决拟合问题不能解决拟合问题梯度下降的优化方法:
算法的选择
小规模岭回归,LinearRegression(不能解决拟合问题)大规模梯度下降1.GD,2.SGD,3.SAG
1.GD:Gradientdescent梯度下降需要把所有的样本值都计算出来,计算量大
2.SGD随机梯度下降SGD:高效且容易实现缺点:需要很多的超参数
3.SAG随机平均梯度下降法
sklearn中的API都实现了SAG优化。
过拟合和欠拟合欠拟合:原因:学习到的数据特征过少解决方法:增加数据的学习特征数量
过拟合:原因:模型过于复杂,原始的特征过多
解决方法:正则化,即尽量减小高次项的影响。
L1正则化LASSO回归公式
作用:使得一些W的数值直接为0,具有特征选择的能力。
L2正则化Ridge(岭回归)
这个L2正则化后的损失函数,就是原本的损失函数(为了更好的求导,所以使用2m作为分母)+λ惩罚项
作用:去改变损失函数的方程,因为损失函数是越小越好,所以L2正则化系统就是说希望改变后面的正则化项。也就是会优化w,使得其中一些W都很小,接近于0,来削弱某些特征的影响。
m样本数,n特征数这个L2正则化后的损失函数,就是原本的损失函数(为了更好的求导,所以使用2m作为分母)+λ惩罚项
岭回归岭回归就是带L2正则化的线性回归
正则化系数对于权重的影响。
由图可知,
正则化力度越大,权重系数越小;正则化力度越小,权重系数越大。deflinear3():"""岭回归对波士顿房价进行预测:return:"""#1)获取数据boston=load_boston()print("特征数量:\n",boston.data.shape)#2)划分数据集x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,random_state=22)#3)标准化transfer=StandardScaler()x_train=transfer.fit_transform(x_train)x_test=transfer.transform(x_test)#4)预估器estimator=Ridge(alpha=0.5,max_iter=)estimator.fit(x_train,y_train)#保存模型#joblib.dump(estimator,"my_ridge.pkl")#加载模型#estimator=joblib.load("my_ridge.pkl")#5)得出模型print("岭回归-权重系数为:\n",estimator.coef_)print("岭回归-偏置为:\n",estimator.intercept_)#6)模型评估y_predict=estimator.predict(x_test)print("预测房价:\n",y_predict)error=mean_squared_error(y_test,y_predict)print("岭回归-均方误差为:\n",error)returnNone逻辑回归
虽然叫回归,但是它是用来处理分类的。
应用场景:(大部分是二分类)
广告点击率是否为垃圾邮件是否患病金融诈骗虚假账号线性回归算法的输出就是逻辑回归算法的输入。它的损失函数和线性回归算法的损失函数不一样,它是对数似然损失。(吴恩达老师视频中的损失函数就是这个)
癌症分类案例importpandasaspdimportnumpyasnpfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportclassification_reportfromsklearn.metricsimportroc_auc_score#1、读取数据path="