900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 回归算法-线性回归分析-正规方程和梯度下降

回归算法-线性回归分析-正规方程和梯度下降

时间:2021-02-11 00:15:04

相关推荐

回归算法-线性回归分析-正规方程和梯度下降

1.分类和回归最本质的区别

定量输出称为回归,或者说是连续变量预测;

定性输出称为分类,或者说是离散变量预测。

举个特别好理解的例子:

预测明天的气温是多少度,这是一个回归任务;

预测明天是阴、晴还是雨,就是一个分类任务。

2.线性回归的定义是:

目标值预期是输入变量的线性组合。线性模型形式简单、易于建模,但却蕴含着机器学习中一些重要的基本思想。线性回归,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。

单变量线性回归:涉及到的变量只有一个。例如:预测房价例子中房子的大小预测房子的价格。f(x) = w1*x+w0,这样通过主要参数w1就可以得出预测的值。通用公式为:

多变量线性回归:涉及到的变量两个或者两个以上。例如:瓜的好坏程度 f(x) = w0+0.2色泽+0.5根蒂+0.3*敲声

,得出的值来判断一个瓜的好与不好的程度。通用公式为:

线性回归的通用公式如下:

线性模型中的向量W值,客观的表达了各属性在预测中的重要性,因此线性模型有很好的解释性。对于这种“多特征预测”也就是(多元线性回归),那么线性回归就是在这个基础上得到这些W的值,然后以这些值来建立模型,预测测试数据。简单的来说就是学得一个线性模型以尽可能准确的预测实值输出标记。

那么如果对于多变量线性回归来说我们可以通过向量的方式来表示W值与特征X值之间的关系:

两向量相乘,结果为一个整数是估计值,其中所有特征集合的第一个特征值x_0x0=1,那么我们可以通过通用的向量公式来表示线性模型:

一个列向量的转置与特征的乘积,得出我们预测的结果,但是显然我们这个模型得到的结果可定会有误差,如下图所示:

单变量:

多变量:

3.损失函数

损失函数是一个贯穿整个机器学习重要的一个概念,大部分机器学习算法都会有误差,我们得通过显性的公式来描述这个误差,并且将这个误差优化到最小值。

对于线性回归模型,将模型与数据点之间的距离差之和做为衡量匹配好坏的标准,误差越小,匹配程度越大。我们要找的模型就是需要将f(x)和我们的真实值之间最相似的状态。于是我们就有了误差公式,模型与数据差的平方和最小(最小二乘法):

上面公式定义了所有的误差和,那么现在需要使这个值最小?那么有两种方法,一种使用梯度下降算法另一种是正规方程解法(只适用于简单的线性回归)。

单变量损失函数直观图:(最低点即损失函数最小)

4.正规方程

缺点:当特征过于复杂时,求解速度太慢。

对于复杂的算法,不能使用正规方程求解。

5.梯度下降

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

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

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

sklearn.linear_model.LinearRegression()普通最小二乘线性回归coef_:回归系数sklearn.linear_model.SGDRegressor( )通过使用SGD最小化线性模型coef_:回归系数

波士顿房价预测:

from sklearn.datasets import load_bostonfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import LinearRegression, SGDRegressorlb = load_boston()# 分隔数据集x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)# 特征工程-标准化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))# 正则方程求解预测结果lr = LinearRegression()lr.fit(x_train, y_train)print(lr.coef_)# 预测的价格y_lr_predict = std_y.inverse_transform(lr.predict(x_test))print("使用正规方程每个房子的预测价格:", y_lr_predict)# 使用梯度下降进行预测sgd = SGDRegressor()sgd.fit(x_train, y_train)print(lr.coef_)y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))print("使用梯度下降预测的房子价格:", y_sgd_predict)

结果:

第一行数据:回归系数

[[-0.07110004 0.08615889 0.0202595 0.04529581 -0.22254461 0.334093880.01187951 -0.30872724 0.26608433 -0.21076225 -0.22538056 0.1155019-0.38227127]]使用正规方程每个房子的预测价格: [[20.09395849][ 7.75780455] [31.32890865][28.7085605 ][18.49587736] [19.96238427][23.72283389][23.24285098][18.1368784 ] [36.93921927][16.5198657 ][32.76367153][20.29527606][33.92074648][19.713028 ][27.51034563][20.25491888][20.21605936][13.56587488][28.74732844][19.24479251][17.04491197][22.64405873][ 8.62358537][ 5.6295][18.05814953][21.14780415][20.31204554][19.65113966][21.14712068][18.43113236][11.0980478 ][43.16397586] [20.9124311 ] [21.15620973] [23.92540998] [18.77503749][22.59984256] [13.59489673] [27.98415227] [36.29917245] [18.81531739] [41.83649405][25.6151952 ][20.76087712] [11.45436917] [12.40058648] [22.26546069] [20.27419562][26.39823994] [24.43034311] [21.10312063] [27.54437518] [29.48756635] [17.53898987][19.47640462] [19.6548141 ] [17.37354367][31.89824482] [18.2063851 ] [16.47210667] [20.48277998] [16.8990683 ] [22.79968676] [-5.46872239] [23.77735018][19.81306667] [18.35743493] [22.39898672] [25.17329992] [22.01602245] [ 4.24147802][31.69162161] [28.73213519] [12.65185419] [40.0616262 ][27.80247031] [16.59949423][ 5.59091431] [15.16137179] [19.14544968] [24.47098474][33.43290072] [27.29195521][21.79981509] [40.65276762] [13.0583617 ] [16.88067478] [22.21407728] [22.13970158] [19.31962385] [14.11739507] [13.43513183] [17.79521648] [24.99292649] [31.1194976 ] [19.46384384] [15.70534771] [12.22164557] [15.39920638] [13.1226957 ] [31.5585473 ][ 3.69700778] [ 7.16909131][21.73385423] [ 9.43926617] [18.16459167] [19.66612955] [21.56944985] [34.96154248] [17.8787807 ] [31.6587] [31.62536828] [21.63368564] [35.11383774] [31.20850887] [25.31469268] [41.91712757] [13.90480205] [16.98830066][28.48438938] [12.04700768] [33.72136355] [15.97341785] [25.83616065][16.47333155] [33.26404024]]E:\Python3.7.1\lib\site-packages\sklearn\utils\validation.py:724: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().y = column_or_1d(y, warn=True)[[-0.07110004 0.08615889 0.0202595 0.04529581 -0.22254461 0.334093880.01187951 -0.30872724 0.26608433 -0.21076225 -0.22538056 0.1155019-0.38227127]]使用梯度下降预测的房子价格: [20.42570443 8.23313351 31.59248135 29.12108101 17.94262076 20.5657525423.11016219 22.98334928 18.41874767 37.27913865 17.2293773 31.3448592120.58124388 32.60576852 19.52397959 27.48723517 20.85221256 20.576790214.98945013 27.42679315 19.1111466 17.31486075 24.14478815 7.59141257.98308519 18.56284837 22.2908332 20.68488199 20.24815352 21.587941618.28855151 10.99702522 41.51613254 20.99774426 21.97210991 23.564118919.1508575 22.98519911 14.21597604 28.20545266 35.97883679 19.2707087641.62111099 25.47199732 21.01636063 12.21563099 12.75602544 22.1923002220.87170875 26.63997148 24.80844094 21.01538657 26.79155218 29.3173596917.60923055 19.99605401 19.49341462 17.41423209 31.78808718 18.8028586116.80189406 20.7288167 17.94327651 22.76529794 -4.10743251 24.0516021419.77214922 18.48844551 22.05091379 25.08626507 21.96007063 5.1990539331.31703446 28.10599283 13.63894181 39.4880974 27.53222297 17.164604775.57969705 16.14625822 18.93368569 24.57247371 33.20838269 27.0283567623.12510729 40.76209519 13.48343876 16.94595687 22.33629466 22.004341519.50803639 14.74630014 13.51828831 17.97033323 24.96401484 30.6515090119.75771178 16.25640754 11.2600302 18.57399563 13.9886661 31.390998064.27354647 8.58681726 22.08055389 10.66432915 18.56129223 19.8497608321.31095001 34.74986742 17.50495043 31.32361712 31.23532952 21.4309822734.58027063 30.64404323 25.2521442 40.22778487 14.39440457 18.300303128.87639243 12.94033115 33.10748415 15.67984941 25.88724062 16.3682815332.34043352]

7.回归性能评估

对于不同的类别预测,我们不能苛刻的要求回归预测的数值结果要严格的与真实值相同。一般情况下,我们希望衡量预测值与真实值之间的差距。因此,可以测评函数进行评价。其中最为直观的评价指标均方误差(Mean Squared Error)MSE,因为这也是线性回归模型所要优化的目标。

MSE的计算方法如下:

8.sklearn回归性能评估

mean_squared_error(y_true, y_pred)

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

对于前面预测波士顿房价的例子,对其回归性能进行评估

from sklearn.metrics import mean_squared_error...print("正规方程的均方误差:",mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict))print("正规方程的均方误差:",mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict))

正规方程的均方误差:19.978543165306537 梯度下降的均方误差: 18.844715397188626

9.正规方程和梯度下降总结

特点:

线性回归器是最为简单,易用的回归模型,从某种程度上限制了使用,尽管如此,在不知道特征关系的前提下,我们仍然使用线性回归器作为大多数系统的首要选择。

小规模数据:正规方程LinearRegress(不能解决拟合问题)

大规模数据:梯度下降SGDRegress

参考:

《统计机器学习》

吴恩达的机器学习课程

某机构视频

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。