失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 机器学习:线性回归梯度下降预测波士顿房价

机器学习:线性回归梯度下降预测波士顿房价

时间:2022-04-06 18:53:01

相关推荐

机器学习:线性回归梯度下降预测波士顿房价

线性回归

分类: 目标值离散

回归: 目标值连续

线性回归:寻找一种能预测的趋势

线性关系:-二维:直线关系-三维:平面

线性关系定义

y=kx+by = kx + by=kx+b

参数b,偏置项,为了对于单个特征的情况更加通用

参数k,权重

f(x)=w1x1+w2x2+...+wdxd+bf(x) = w_1x_1 + w_2x_2 +...+ w_dx_d + bf(x)=w1​x1​+w2​x2​+...+wd​xd​+b

线性回归定义:

线性回归通过一个或多个自变量与因变量之间进行建模的回归分析

一元线性回归:变量只有一个

多元线性回归:变量两个或以上

通用公式:

h(w)=w0+w1x1+w2x2+...=wTxh(w) = w_0 + w_1x_1 + w_2x_2 + ... = w^Tx h(w)=w0​+w1​x1​+w2​x2​+...=wTx

其中w,x为矩阵

w=(w0w1w2)w = \begin{pmatrix} w_0 \\ w_1 \\ w_2 \end{pmatrix}w=⎝⎛​w0​w1​w2​​⎠⎞​, x=(1x1x2)x = \begin{pmatrix} 1 \\ x_1 \\ x_2 \end{pmatrix}x=⎝⎛​1x1​x2​​⎠⎞​

属性和权重的组合来预测结果

矩阵

数组 矩阵0维11维[1, 2, 3]2维[必须是二维的[1, 2, 3],满足了特定的运算要求[4, 5, 6]]3维[[[1, 2, 3],[4, 5, 6]],[[1, 2, 3],[4, 5, 6]]]

数组的运算:加法,乘法

numpy.ndarray

矩阵乘法:

(m行,l列) * (l行,n列) = (m行,n列)

特征值 权重 目标值[[1, 2, 3, 4]] [[1], [2], [3], [4]] 一个样本一个值(1, 4) (4, 1) (1,1)(100, 4) (4, 1) (100,1)

数组相乘

import numpy as npa = [[1, 2, 3, 4], [5, 6, 7, 8], [1, 4, 3, 5]]b = [2, 2, 2, 2]np.multiply(a, b)Out[5]: array([[ 2, 4, 6, 8],[10, 12, 14, 16],[ 2, 8, 6, 10]])

矩阵相乘

import numpy as npa = [[1, 2, 3, 4], [5, 6, 7, 8], [1, 4, 3, 5]]c = [[2], [2], [2], [2]]np.dot(a, c)Out[9]: array([[20],[52],[26]])

线性回归

求函数中的参数w,使得损失函数最小

迭代的算法

损失函数(误差大小)

f(a)=(hw(x1)−y1)2+(hw(x2)−y2)2+...+(hw(xm)−ym)2f(a)=(h_w(x_1)-y_1)^2 + (h_w(x_2)-y_2)^2 + ... +(h_w(x_m)-y_m)^2f(a)=(hw​(x1​)−y1​)2+(hw​(x2​)−y2​)2+...+(hw​(xm​)−ym​)2

f(a)=∑i=1m(hw(xi)−yi)2f(a) = \sum_{i=1}^{m}(h_w(x_i)-y_i)^2f(a)=i=1∑m​(hw​(xi​)−yi​)2

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

hw(xi)h_w(x_i)hw​(xi​) 为第i个训练赝本特征值组合预测函数

又称为最小二乘法

尽量去减少损失,算法的自我学习过程

算法策略(损失函数) 优化线性回归误差平方和 正规方程最小二乘法 梯度下降

最小二乘法之正规方程

w=(XTX)−1XTyw = (X^TX)^{-1}X^Tyw=(XTX)−1XTy

XXX 为特征矩阵

yyy 为目标值矩阵

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

XTX^TXT 转置

X−1X^-1X−1 求逆 -> X∗?=单位矩阵X * ? = 单位矩阵X∗?=单位矩阵

单位矩阵

[[1, 0, 0], [0, 1, 0], [0, 0, 1]]

最小二乘法之梯度下降

方向

d=bcost(w0+w1x1)bw1d = \frac{bcost(w0+w1x1)}{bw1}d=bw1bcost(w0+w1x1)​

w1:=−w1−adw1 := -w1 -adw1:=−w1−ad

w0:=−w0−adw0 := -w0 -adw0:=−w0−ad

a是学习速率

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

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

线性回归API

普通最小二乘线性回归

sklearn.linear_model.LinearRegression

coef_ 回归系数

使用SGD最小线性模型

sklearn.linear_model.SGDRegressor

coef_ 回归系数

scikit-learn

优点:封装好,建立模型简单,预测简单

缺点:算法过程,参数都在算法内部优化

v0.18

v0.19 转换器 estimator 要求数据必须是二维数据

reshape(-1, 1)

TensorFlow

封装高低都有,自己实现线性回归

回归性能评估

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

MSE=1m∑i=1m(yi−y−)2MSE=\frac{1}{m}\sum_{i=1}^{m}(y^i-y^-)^2MSE=m1​i=1∑m​(yi−y−)2

yiy^iyi预测值

y−y^-y−真实值

梯度下降和正规方程区别

代码示例

# -*- coding: utf-8 -*-from sklearn.datasets import load_bostonfrom sklearn.linear_model import LinearRegression, SGDRegressorfrom sklearn.preprocessing import StandardScalerfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import mean_squared_error# 加载数据boston = load_boston()# 训练集,测试集拆分X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.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(sgd.coef_)y_sgd_predict = std_y.inverse_transform(sgd.predict(X_test))print(y_sgd_predict)# 性能评估 均方误差lr_mse = mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict)sgd_mse = mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict)print(lr_mse) # 28.97print(sgd_mse) # 31.36

如果觉得《机器学习:线性回归梯度下降预测波士顿房价》对你有帮助,请点赞、收藏,并留下你的观点哦!

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