回归算法

网友投稿 244 2022-09-24

回归算法

文章目录

​​回归算法-线性回归分析​​

​​线性模型​​​​线性回归​​

​​单变量​​​​多变量​​

​​损失函数(误差大小)​​​​最小二乘法之正规方程​​​​最小二乘法之梯度下降​​​​sklearn线性回归正规方程、梯度下降API​​​​线性回归实例​​

​​波士顿房价数据案例分析流程​​

​​回归性能评估​​

​​sklearn回归评估API​​​​mean_squared_error​​

​​过拟合与欠拟合​​

​​过拟合​​​​欠拟合​​

​​欠拟合原因以及解决办法​​

​​过拟合原因以及解决办法​​

​​L2正则化​​

​​带有正则化的线性回归-Ridge(岭回归)​​​​线性回归 LinearRegression与Ridge对比​​

​​sklearn中模型的保存和加载​​​​分类算法-逻辑回归​​

​​应用​​​​sigmoid函数​​​​逻辑回归公式​​​​逻辑回归的损失函数、优化(了解)​​​​sklearn逻辑回归API​​​​LogisticRegression回归案例​​

​​良/恶性乳腺癌肿数据​​​​pandas使用​​​​多分类问题​​

回归算法-线性回归分析

线性模型

试图学得一个通过​​属性的线性组合​​来进行预测的函数:

f(x)=w1x1+w2x2+…+wdxd+b

w为权重,b称为偏置项,可以理解为:w0×1

线性回归

定义: 线性回归通过一个或者多个自变量与因变量之间之间进行建模的回归分析。其中特点为一个或多个称为回归系数的模型参数的线性组合

一元线性回归: 涉及到的变量只有一个多元线性回归: 涉及到的变量两个或两个以上

通用公式:ℎ(w)= w0+w1x1+w2x2+…= wTx 其中w,x为矩阵:

单变量

多变量

损失函数(误差大小)

yi为第i个训练样本的真实值

ℎw(xi)为第i个训练样本特征值组合预测函数

总损失定义:

又称​​最小二乘法​​

尽量去减少这个损失(两种方式)

如何去求模型当中的W,使得损失最小?(目的是找到最小损失对应的W值)

最小二乘法之正规方程

X为特征值矩阵,y为目标值矩阵

缺点:当特征过于复杂,求解速度太慢; 对于复杂的算法,不能使用正规方程求解(逻辑回归等)

损失函数直观图(单变量举例)

最小二乘法之梯度下降

以单变量中的w0,w1为例子:

理解: 沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新W值

使用: 面对训练数据规模十分庞大的任务

sklearn线性回归正规方程、梯度下降API

sklearn.linear_model.LinearRegression正规方程sklearn.linear_model.SGDRegressor梯度下降

sklearn.linear_model.LinearRegression() 普通最小二乘线性回归

coef_ :回归系数

sklearn.linear_model.SGDRegressor( ) 通过使用SGD最小化线性模型

coef_ :回归系数

线性回归实例

1、sklearn线性回归正规方程、梯度下降API

2、波士顿房价数据集分析流程

波士顿房价数据案例分析流程

1、波士顿地区房价数据获取

2、波士顿地区房价数据分割

3、训练与测试数据标准化处理

4、使用最简单的线性回归模型LinearRegression和 梯度下降估计SGDRegressor对房价进行预测

from sklearn.datasets import load_bostonfrom sklearn.linear_model import LinearRegression,SGDRegressorfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerdef mylinear(): """ 线性回归直接预测房子价格 :return: None """ # 获取数据 lb = load_boston() # 分割数据集到训练集和测试集 x_train,x_test,y_train,y_test = train_test_split(lb.data,lb.target, test_size=0.25) print(y_train,y_test) # 进行标准化处理(特征值和目标值都进行标准化) # 实例化两个API std_x = StandardScaler() x_train = std_x.fit_transform(x_train) x_test = std_x.transform(x_test) # 目标值 std_y = StandardScaler() # 这里必须传二维数组 y_train = std_y.fit_transform(y_train.reshape(-1,1)) y_test = std_y.transform(y_test.reshape(-1,1)) # estimator预测 # 正规方程求解方式预测结果 lr = LinearRegression() lr.fit(x_train, y_train) # 回归系数 print(lr.coef_) # 预测测试集的房子价格(将数据反标准化) y_predict = std_y.inverse_transform(lr.predict(x_test)) print("测试集里面每个样本的预测价格是: ", y_predict.tolist()) # 均方误差 print("梯度下降的均方误差: ",mean_squared_error(std_y.inverse_transform(y_test),y_sgd_predict)) return Noneif __name__=="__main__": mylinear()

回归性能评估

(均方误差(Mean Squared Error)MSE) 评价机制:

sklearn回归评估API

​​sklearn.metrics.mean_squared_error​​

mean_squared_error

mean_squared_error(y_true, y_pred)

均方误差回归损失y_true:真实值y_pred:预测值return:浮点数结果

1、LinearRegression与SGDRegressor评估 2、特点:线性回归器是最为简单、易用的回归模型。 从某种程度上限制了使用,尽管如此,在不知道特征之 间关系的前提下,我们仍然使用线性回归器作为大多数 系统的首要选择。 小规模数据:LinearRegression(不能解决拟合问题)以及其它 大规模数据:SGDRegressor

过拟合与欠拟合

过拟合

一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)

欠拟合

一个假设在训练数据上不能获得更好的拟合, 但是在训练数据外的数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)

​​·对线性模型进行训练学习会变成复杂模型​​

欠拟合原因以及解决办法

原因: 学习到数据的特征过少解决办法: 增加数据的特征数量

过拟合原因以及解决办法

原因: 原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾 各个测试数据点解决办法: 进行特征选择,消除关联性大的特征(很难做) 交叉验证(让所有数据都有过训练) 正则化(了解)

L2正则化

作用:可以使得W的每个元素都很小,都接近于0优点:越小的参数说明模型越简单,越简单的模型则越不 容易产生过拟合现象

带有正则化的线性回归-Ridge(岭回归)

​​sklearn.linear_model.Ridge​​

sklearn.linear_model.Ridge(alpha=1.0) 具有l2正则化的线性最小二乘法

alpha:正则化力度 coef_:回归系数

正则化图解:

线性回归 LinearRegression与Ridge对比

岭回归:回归得到的回归系数更符合实际,更可靠。另外,能让 估计参数的波动范围变小,变的更稳定。在存在病态数据偏多的研 究中有较大的实用价值。

from sklearn.linear_model import Ridgerd = Ridge()rd.fit(x_train, y_train)print(rd.coef_)# 预测测试集的房子价格(将数据反标准化)y_rd_predict = std_y.inverse_transform(sgd.predict(x_test))print("岭回归测试集里面每个房子的预测价格是: ", y_rd_predict.tolist())# 均方误差print("岭回归的均方误差: ", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict))

sklearn中模型的保存和加载

​​javascript:void(0)​​

分类算法-逻辑回归

应用

​​逻辑回归是解决二分类问题的利器​​

输入:ℎ(w)= w0+w1x1+w2x2+…= wTx(单个样本)

sigmoid函数

逻辑回归公式

公式:

输出:[0,1]区间的概率值,默认0.5作为阀值

注:

σ(x)为sigmoid函数

逻辑回归的损失函数、优化(了解)

与线性回归原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降求解

当y=1时:

sklearn逻辑回归API

​​sklearn.linear_model.LogisticRegression​​

sklearn.linear_model.LogisticRegression(penalty=‘l2’, C = 1.0)

Logistic回归分类器coef_:回归系数

LogisticRegression回归案例

良/恶性乳腺癌肿数据

原始数据的下载地址:​​​相关的医学特征,最后一列表示肿瘤类型的数值。 (2)包含16个缺失值,用”?”标出。

pandas使用

pd.read_csv(’’,names=column_names) column_names:指定类别名字,[‘Sample code number’,‘Clump Thickness’, ‘Uniformity of Cell Size’,‘Uniformity of Cell Shape’,‘Marginal Adhesion’, ‘Single Epithelial Cell Size’,‘Bare Nuclei’,‘Bland Chromatin’,‘Normal Nucleoli’,‘Mitoses’,‘Class’] return:数据replace(to_replace=’’,value=):返回数据dropna():返回数据

多分类问题

逻辑回归解决办法:1V1,1Vall

from sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import classification_reportimport pandas as pdimport numpy as npdef logistic(): """ 逻辑回归做二分类进行癌症预测(根据细胞的属性特征) :return: None """ # 构造列标签名字 column = ['Sample code number','Clump Thickness', 'Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class'] # 读取数据 data = pd.read_csv(" print(data) # 缺失值进行处理 data = data.replace(to_replace='?',value=np.nan) data = data.dropna() # 进行数据的分割 x_train,x_test,y_train,y_test = train_test_split(data[column[1:10]],data[column[10]],test_size=0.25) # 进行标准化处理 std = StandardScaler() x_train = std.fit_transform(x_train) x_test = std.transform(x_test) # 逻辑回归预测 lg = LogisticRegression(C=1.0) lg.fit(x_train,y_train) print(lg.coef_) y_predict = lg.predict(x_test) print("准确率: ",lg.score(x_test,y_test)) print("召回率: ", classification_report(y_test, y_predict, labels=[2,4], target_names=["良性","恶性"])) return Noneif __name__=="__main__": logistic()

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:腾讯云验证码入门小知识
下一篇:15.84万!《金刚川》刚上映,就创下了国产影史新纪录!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~