国内简洁网站设计,河南建筑网站,四川住房建设网站,减少网站跳出率线性回归分析-回归算法
1 回归算法 机器学习中监督学习算法分为分类算法和回归算法两种#xff0c;其实就是根据类别标签分布类型为离散型、连续性而定义的。回归算法用于目标是连续的#xff0c;在指定区间内可以是任意一个数值#xff0c;针对的是数值型的样本#xff0…线性回归分析-回归算法
1 回归算法 机器学习中监督学习算法分为分类算法和回归算法两种其实就是根据类别标签分布类型为离散型、连续性而定义的。回归算法用于目标是连续的在指定区间内可以是任意一个数值针对的是数值型的样本使用回归可以在给定输入的时候预测出一个数值这是对分类方法的提升因为这样可以预测连续型数据而不仅仅是离散的类别标签。 首先举个房价的例子房子的面积和房子的价格有着明显的关系那么在坐标系中可以看到这些点 如果那么通过一条直线把这个关系描述出来叫线性关系 如果那么通过一条曲线把这个关系描述出来叫非线性关系 其实回归的目的就是建立一个回归方程函数用来预测目标值回归的求解就是求这个回归方程的回归系数。
2 回归算法之线性回归 线性回归的定义是目标值预期是输入变量的线性组合。线性回归通过一个或多个自变量与因变量之间进行建模的回归分析。其特点是一个或多个称之为回归系数的模型参数的线性组合。 一元线性回归涉及到的变量只有一个。 多元线性回归涉及到的变量两个或两个以上。 线性模型中的向量W值客观的表达了各属性在预测中的重要性对于这种“多特征预测”也就是多元线性回归那么线性回归就是在这个基础上得到这些W的值然后以这些值来建立模型预测测试数据。简单的来说就是学得一个线性模型以尽可能准确的预测实值输出标记。 那么如果对于多变量线性回归来说我们可以通过向量的方式来表示W值与特征X值之间的关系 两向量相乘结果为一个整数是估计值,其中所有特征集合的第一个特征值 1,那么我们可以通过通用的向量公式来表示线性模型 一个列向量的转置与特征的乘积得出我们预测的结果但是显然我们这个模型得到的结果可定会有误差如下
3 损失函数最小二乘法 损失函数是一个贯穿整个机器学习重要的一个概念大部分机器学习算法都会有误差我们得通过显性的公式来描述这个误差并且将这个误差优化到最小值。 对于线性回归模型将模型与数据点之间的距离差之和做为衡量匹配好坏的标准误差越小,匹配程度越大。我们要找的模型就是需要将f(x)和我们的真实值之间最相似的状态。所以误差公式就是模型与数据差的平方和最小 上面公式定义了所有的误差和如何去求模型当中的W使得损失最小目的是找到最小损失对应的W值。有两种办法一种使用梯度下降算法另一种使正规方程解法只适用于简单的线性回归。 正规方程公式如下
4 最小二乘法之梯度下降 误差公式是一个通式我们取两个单个变量来求最小值误差和可以表示为 通过调整不同的w1 和w0的值就能使误差不断变化而当你找到这个公式的最小值时你就能得到最好的w1 ,w0而这对(w1 ,w0 )就是能最好描述你数据关系的模型参数。怎么找cost(w0w1x1 )的最小?cost(w0w1x1)的图像其实像一个山谷一样有一个最低点。找这个最低点的办法就是然后沿着这个弯下降的方向找最后就能找到山谷的最低点。 进行移动的时候也需要考虑每次移动的速度也就是α的值,这个值也叫做学习率 样就能求出w0 ,w1的值当然你这个过程是不断的进行迭代求出来通过交叉验证方法即可。 α为学习率需要手动指定
5 sklearn线性回归正规方程、梯度下降API sklearn.linear_model.LinearRegression 正规方程 sklearn.linear_model.SGDRegressor 梯度下降 方法 fit(X,y,sample_weight None)使用X作为训练数据拟合模型y作为X的类别值。Xy为数组或者矩阵 predict(X)预测提供的数据对应的结果 属性 coef_表示回归系数w(w1,w2…) intercept_ 表示w0
6 案例 波士顿房价数据案例分析流程 步骤①波士顿地区房价数据获取②波士顿地区房价数据分割③训练与测试数据标准化处理④使用最简单的线性回归模型LinearRegression和 梯度下降估计SGDRegressor对房价进行预测
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression,SGDRegressor
# 1获取数据
lb load_boston()# 2分割数据为训练集合测试集
x_train,x_test,y_train,y_test train_test_split(lb.data,lb.target,test_size0.25)# 3进行标准化处理特征值和目标值都必须进行标准化处理
std1 StandardScaler()
x_train std1.fit_transform(x_train)
x_test std1.transform(x_test)
# 目标值标准化
std2 StandardScaler()
y_train std2.fit_transform(y_train.reshape(-1,1))
y_test std2.transform(y_test.reshape(-1,1))# 4.estimator估计器测试
# 4.1正规方程求解预测
lr LinearRegression()
# 输入数据一直不断用训练数据建立模型
lr.fit(x_train,y_train)print(lr回归系数为,lr.coef_)
# 预测测试集房子价格
y_predict lr.predict(x_test)
# 因为标准化之后得出的都是标准化比较小的值要想看到原来的值要用inverse_transform转化为标准化之前的值
y_predict std2.inverse_transform(y_predict)
print(lr测试集每个样本的预测价格,y_predict)
# 4.2梯度下降求解预测
sgd SGDRegressor()
# 输入数据一直不断用训练数据建立模型
sgd.fit(x_train,y_train)print(sgd回归系数为,sgd.coef_)
# 预测测试集房子价格
y_sgdPredict sgd.predict(x_test)
# 因为标准化之后得出的都是标准化比较小的值要想看到原来的值要用inverse_transform转化为标准化之前的值
y_sgdPredict std2.inverse_transform(y_sgdPredict)
print(sgd测试集每个样本的预测价格,y_sgdPredict) 7 回归性能评估 (均方误差(Mean Squared Error)MSE) 评价机制 其实就是对每一组预测值减去真实值的平方求和 sklearn回归评估APIsklearn.metrics.mean_squared_error mean_squared_error(y_true, y_pred)均方误差回归损失 y_true:真实值 y_pred:预测值 return:浮点数结果 注意真实值预测值为标准化之前的值
print(正规方程均方根误差,mean_squared_error(std2.inverse_transform(y_test),y_predict))
print(梯度下降均方根误差,mean_squared_error(std2.inverse_transform(y_test),y_sgdPredict))由于数据量少所以正规方程的均方根误差小一点
8 线性回归的优缺点 优点结果易于理解计算不复杂 缺点对非线性的数据拟合不好
9 正规方程与梯度下降对比 此图为官网给我们的建议如何选择算法当数据量大于10万的时候建议使用梯度下降 LinearRegression与SGDRegressor评估 特点线性回归器是最为简单、易用的回归模型。从某种程度上限制了使用尽管如此在不知道特征之间关系的前提下我们仍然使用线性回归器作为大多数系统的首要选择。小规模数据LinearRegression(不能解决拟合问题)以及其它大规模数据SGDRegressor