临汾外贸网站建设价格更换网站域名 推广
临汾外贸网站建设价格,更换网站域名 推广,股票网站模板 dedecms,网站搜索 收录优化文章目录 线性回归的定义损失函数(误差大小)梯度下降算法梯度下降的API(LinearRegression)均方误差(Mean Squared Error)MSE) 评价机制最小二乘法之正规方程正规方程vs梯度下降 欠拟合与过拟合回归算法之岭回归L2正则化 线性回归的定义
线性回归的定义是#xff1a;目标值预期… 文章目录 线性回归的定义损失函数(误差大小)梯度下降算法梯度下降的API(LinearRegression)均方误差(Mean Squared Error)MSE) 评价机制最小二乘法之正规方程正规方程vs梯度下降 欠拟合与过拟合回归算法之岭回归L2正则化 线性回归的定义
线性回归的定义是目标值预期是输入变量的线性组合。线性模型形式简单、易于建模但却蕴含着机器学习中一些重要的基本思想。线性回归是利用数理统计中回归分析来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法运用十分广泛。 优点结果易于理解计算不复杂 缺点对非线性的数据拟合不好 适用数据类型数值型和标称型 对于单变量线性回归例如前面房价例子中房子的大小预测房子的价格。f(x) w1*xw0这样通过主要参数w1就可以得出预测的值。
通用公式为
那么对于多变量回归例如瓜的好坏程度 f(x) w00.2色泽0.5根蒂0.3*敲声得出的值来判断一个瓜的好与不好的程度。
通用公式为 线性模型中的向量W值客观的表达了各属性在预测中的重要性因此线性模型有很好的解释性。对于这种“多特征预测”也就是多元线性回归那么线性回归就是在这个基础上得到这些W的值然后以这些值来建立模型预测测试数据。简单的来说就是学得一个线性模型以尽可能准确的预测实值输出标记。
那么如果对于多变量线性回归来说我们可以通过向量的方式来表示W值与特征X值之间的关系 两向量相乘结果为一个整数是估计值,其中所有特征集合的第一个特征值x01,那么我们可以通过通用的向量公式来表示线性模型 一个列向量的转置与特征的乘积得出我们预测的结果但是显然我们这个模型得到的结果可定会有误差如下图所示:
试图学得一个通过属性的线性组合来进行预测的函数
损失函数(误差大小)
损失函数是一个贯穿整个机器学习重要的一个概念大部分机器学习算法都会有误差我们得通过显性的公式来描述这个误差并且将这个误差优化到最小值。
对于线性回归模型将模型与数据点之间的距离差之和做为衡量匹配好坏的标准误差越小,匹配程度越大。我们要找的模型就是需要将f(x)和我们的真实值之间最相似的状态。于是我们就有了误差公式模型与数据差的平方和最小 - 上面公式定义了所有的误差和那么现在需要使这个值最小那么有两种方法一种使用梯度下降算法另一种使正规方程解法只适用于简单的线性回归。
梯度下降算法
什么是梯度下降算法? 上面误差公式是一个通式我们取两个单个变量来求最小值误差和可以表示为 可以通过调整不同的w1 和w0的值就能使误差不断变化而当你找到这个公式的最小值时你就能得到最好的w1,w0而这对(w1,w0)就是能最好描述你数据关系的模型参数。
怎么找cost(w0w1x1)的最小值? cost(w0w1w1)的图像其实像一个山谷一样有一个最低点。找这个最低点的办法就是先随便找一个点, 然后 沿着这个碗下降的方向找最后就能找到山谷的最低点。 梯度下降的API(LinearRegression)
sklearn.linear_model.LinearRegression
from sklearn.linear_model import LinearRegression
reg LinearRegression() #实例化一个对象方法: fit(X,y,sample_weight None)使用X作为训练数据拟合模型y作为X的类别值。Xy为数组或者矩阵 reg.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])predict(X)预测提供的数据对应的结果
reg.predict([[3,3]])array([ 3.]) 属性: coef_ 表示回归系数w(w1,w2…)
reg.coef_
array([ 0.5, 0.5])均方误差(Mean Squared Error)MSE) 评价机制
mean_squared_error(y_true, y_pred) 均方误差回归损失 y_true:真实值y_pred:预测值return:浮点数结果 注y^i为预测值¯y为真实值
from sklearn.metrics import mean_squared_error
mean_squared_error()案例:
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge, LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, classification_report
import joblib
import pandas as pd
import numpy as npdef mylinear():线性回归直接预测房子价格:return: None# 获取数据lb load_boston()# 分割数据集到训练集和测试集x_train, x_test, y_train, y_test train_test_split(lb.data, lb.target, test_size0.25)print(y_train, y_test)# 进行标准化处理(?) 目标值处理# 特征值和目标值是都必须进行标准化处理, 实例化两个标准化APIstd_x StandardScaler()x_train std_x.fit_transform(x_train)x_test std_x.transform(x_test)# 目标值std_y StandardScaler()# 这里必须是一个二维的数据,把一维的数据传入用.reshape(-1,1)y_train std_y.fit_transform(y_train.reshape(-1, 1))y_test std_y.transform(y_test.reshape(-1, 1))# 预测房价结果# model joblib.load(./tmp/test.pkl)## y_predict std_y.inverse_transform(model.predict(x_test))## print(保存的模型预测的结果, y_predict)# estimator预测# 正规方程求解方式预测结果lr LinearRegression() # 建立这个对象lr.fit(x_train, y_train) # 用正规方程训练print(lr.coef_) # 打印出W的值(权重)# 保存训练好的模型# joblib.dump(lr, ./tmp/test.pkl)# 预测测试集的房子价格y_lr_predict std_y.inverse_transform(lr.predict(x_test)) # 预测值并且将标准化的格式转换回来print(正规方程测试集里面每个房子的预测价格, y_lr_predict)print(正规方程的均方误差, mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict)) # 评估正规方程的好坏程度# 梯度下降去进行房价预测sgd SGDRegressor() # 建立梯度下降模型sgd.fit(x_train, y_train) #利用梯度下降进行训练print(sgd.coef_) # 打印W(权重值)# 预测测试集的房子价格y_sgd_predict std_y.inverse_transform(sgd.predict(x_test)) # 预测值并且将标准化的格式转换回来print(梯度下降测试集里面每个房子的预测价格, y_sgd_predict)print(梯度下降的均方误差, mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict))# 岭回归去进行房价预测rd Ridge(alpha1.0) # 建立岭回归模型 这个有个超参数,正则化rd.fit(x_train, y_train) # 训练岭回归模型print(rd.coef_) #打印W(权重值)# 预测测试集的房子价格y_rd_predict std_y.inverse_transform(rd.predict(x_test)) # 预测值并且将标准化的格式转换回来print(岭回归测试集里面每个房子的预测价格, y_rd_predict)print(岭回归的均方误差, mean_squared_error(std_y.inverse_transform(y_test), y_rd_predict))return None
if __name__ __main__:mylinear()最小二乘法之正规方程
求解w(X^TX)^−1X^Ty ,X为特征值矩阵y为目标值矩阵
缺点当特征过于复杂求解速度太慢对于复杂的算法不能使用正规方程求解(逻辑回归等)
sklearn.linear_model.LinearRegression正规方程
from sklearn.linear_model import LinearRegression
lr LinearRegression()案例看上面的梯度下降
正规方程vs梯度下降 特点线性回归器是最为简单、易用的回归模型。从某种程度上限制了使用尽管如此在不知道特征之间关系的前提下我们仍然使用线性回归器作为大多数系统的首要选择。
小规模数据LinearRegression(不能解决拟合问题)以及其它大规模数据SGDRegressor
欠拟合与过拟合 过拟合一个假设在训练数据上能够获得比其他假设更好的拟合 但是在训练数据外的数据集上却不能很好地拟合数据此时认为这个假设出现了过拟合的现象。(模型过于复杂) 原因原始特征过多存在一些嘈杂特征 模型过于复杂是因为模型尝试去兼顾各个测试数据点解决办法进行特征选择消除关联性大的特征(很难做)交叉验证(让所有数据都有过训练)正则化 欠拟合一个假设在训练数据上不能获得更好的拟合 但是在训练数据外的数据集上也不能很好地拟合数据此时认为这个假设出现了欠拟合的现象。(模型过于简单) 原因学习到数据的特征过少解决办法增加数据的特征数量
回归算法之岭回归
L2正则化
作用可以使得W的每个元素都很小都接近于0优点越小的参数说明模型越简单越简单的模型则越不 容易产生过拟合现象API: sklearn.linear_model.Ridge(alpha1.0) 具有l2正则化的线性最小二乘法
alpha:正则化力度 coef_:回归系数
岭回归回归得到的回归系数更符合实际更可靠。另外能让 估计参数的波动范围变小变的更稳定。在存在病态数据偏多的研 究中有较大的实用价值。
from sklearn.linear_model import Ridgerd Ridge(alpha1.0) # 建立岭回归模型 这个有个超参数,正则化
rd.fit(x_train, y_train) # 训练岭回归模型具体案例在梯度下降案例
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88967.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!