python+Scikit-Learn线性回归及损失函数

python+Scikit-Learn线性回归及损失函数

环境:(ubuntu18.04LTS)Anaconda3+python3.7.4+Scikit-Learn

一、线性回归

  • 监督学习
    机器学习主要分为监督学习、非监督学习和强化学习。其中,监督学习主要包括:分类(Classification)、回归(Regression)和排序(Ranking)。
    监督学习
    监督学习是通过已知的训练数据集,训练得到数据集中特征x→标签 y 的映射关系 f ,然后通过训练得到的映射关系 f ,对测试数据集中的测试输入 x 进行预测,得到对应的预测值: y ^ = f ( x ) \hat{y}=f (x) y^=f(x)通过测试数据中的真实结果,可以得到模型的预测误差 r = y − y ^ r = y-\hat{y} r=yy^
  • 回归与分类
    在监督学习任务中,如果数据集的标签 y 为连续值,则该任务为回归任务;反之,如果标签 y 为离散值,则该任务为分类任务。
  • 线性回归
    假设数据集中的输入(特征)和输出(标签)之间符合线性关系 y = f ( x ) = W T x y = f(x)=W^Tx y=f(x)=WTx = [ w 0 , w 1 , . . . , w N ] [ 1 x 1 . . . x n ] = w 0 + ∑ r = 1 n w i x i =[w_0,w_1,...,w_N]\begin{bmatrix} 1\\x_1\\...\\x_n \\ \end{bmatrix}=w_0+\sum_{r=1}^nw_ix_i =[w0,w1,...,wN]1x1...xn=w0+r=1nwixi则称之为线性回归。其中 w 0 w_0 w0称为偏置, w i w_i wi称为回归系数,如下图所示。
    在这里插入图片描述
  • 预测残差: r = y − y ^ r= y-\hat{y} r=yy^
  • 残差平方: r 2 = ( y − y ^ ) 2 r^2 = (y-\hat{y})^2 r2=(yy^)2
  • 数据集训练的模型预测残差值平方和RSS最小,则说明线型回归效果最好。 R S S = ∑ i = 1 n r i 2 = ∑ i = 1 n ( y − y ^ ) 2 RSS=\sum_{i=1}^nr_i^2=\sum_{i=1}^n(y-\hat{y})^2 RSS=i=1nri2=i=1n(yy^)2

二、损失函数

在机器学习中,损失函数用于度量数据集中样本的真实值与训练模型的预测值之间的差异。

  • L2损失
    L ( y − y ^ ) = ( y − y ^ ) 2 = r 2 ⇒ m i n ∑ i = 1 n L ( y − y ^ ) = m i n ∑ i − 1 n r i 2 L(y-\hat{y})=(y-\hat{y})^2=r^2\Rightarrow min\sum_{i=1}^nL(y-\hat{y})=min\sum_{i-1}^nr_i^2 L(yy^)=(yy^)2=r2mini=1nL(yy^)=mini1nri2
    • 优点:处处可导,优化计算方便
    • 缺点:对噪声敏感(异常值会被平方放大,影响模型准确性)
  • L1损失
    L ( y − y ^ ) = ∣ y − y ^ ∣ = ∣ r ∣ L(y-\hat{y})=|y-\hat{y}|=|r| L(yy^)=yy^=r
    • 优点:对噪声不敏感(异常值对模型的影响就是绝对值本身,不会被平方放大)
    • 缺点:在0处不可导,优化计算不方便
  • Huber损失
    L δ ( r ) = { 1 2 r 2 , i f ∣ r ∣ ≤ δ δ ∣ r ∣ − 1 2 δ 2 , o t h e r w i s e L_\delta(r)=\begin{cases} \frac 1 2r^2 , &if |r|\le \delta \\ \delta|r|-\frac1 2 \delta^2 , &otherwise\end{cases} Lδ(r)={21r2,δr21δ2,ifrδotherwise
    • 优点:在0处可导,优化计算方便,且对噪声不敏感。

三、python+Scikit-Learn实现

"""
Created on Tue Nov.26 2019
Test-Linear regression by Scikie-Learn
@author:Lihoon
"""

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import HuberRegressor

# 训练数据集:X_train表示学生学习时长,Y_train表示学生的分数
X_train = np.array([6, 7, 7.5, 8, 6.6, 8.1, 6.8, 6.9, 7.3, 6.9])
Y_train = np.array([53, 60, 56, 79, 58, 85, 70, 56, 69, 76])

# 建立特征和标签变量
x_train = X_train.reshape(-1, 1)
y_train = Y_train.reshape(-1, 1)

# 定义测试数据
x_test = np.array([7.2]).reshape(-1, 1)

# linear regression method初始化及训练模型
lr_model = LinearRegression()
lr_model.fit(x_train, y_train)

# Huber regression method初始化及训练模型
hb_model = HuberRegressor()
hb_model.fit(x_train, y_train)

# 输出预测结果
y_pred = lr_model.predict(x_test)
y_pred_huber = hb_model.predict(x_test)
print("result of linear method is: {} ".format(y_pred))
print("result of Huber method is: {} ".format(y_pred_huber))

# plot
plt.plot(x_train, y_train, 'b*')
plt.plot(x_test, y_pred, 'ro')
plt.plot(x_test, y_pred_huber, 'ko')
plt.plot(x_train, lr_model.predict(x_train), color='g')
plt.plot(x_train, hb_model.predict(x_train), color='b')
plt.show()
  • 通过线性回归训练,得到的线性回归模型如下图所示,对测试数据7.2,两种方法计算得到的预测值为:
result of linear method is: [[67.30939984]] 
result of Huber method is: [67.79339269] 

在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scikit-learn是一个用于机器学习的Python库,它提供了一系列用于回归分析的算法和工具。其中包括了非线性回归模型的实现。非线性回归是指因变量和自变量之间的关系不是简单的线性关系。 Scikit-learn中的非线性回归模型通过引入非线性的特征变换或者使用非线性的核函数来适应非线性数据关系。我们可以使用花费最小二乘法(如岭回归、Lasso回归、弹性网络等)或者支持向量回归(SVR)进行非线性回归建模。 非线性回归模型的使用步骤大致如下: 1. 载入数据:将数据导入Python环境,可以使用pandas库加载CSV文件或者直接导入NumPy数组格式的数据。 2. 特征转换:根据实际情况对特征进行非线性转换,例如多项式特征转换(PolynomialFeatures)或者其他的基函数转换。 3. 划分数据集:将数据集划分为训练集和测试集,训练集用于模型参数的学习,测试集用于模型的评估。 4. 模型训练:使用Scikit-learn中的非线性回归模型进行训练,例如岭回归、Lasso回归、弹性网络或者支持向量回归(SVR)等。 5. 模型评估:根据测试集上的表现指标,如均方误差(Mean Squared Error)、R平方值(R-squared)等评估模型的性能。 6. 模型预测:使用训练好的模型对新样本进行预测,得到预测结果。 Scikit-learn线性回归模型的优点是具有灵活性和可解释性。同时,Scikit-learn库还提供了交叉验证、特征选择、模型选择等功能,可以帮助我们更好地进行非线性回归问题的建模和评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值