首页 > 其他分享 >【机器学习】回归的原理学习与葡萄酒数据集的最小二乘法线性回归实例

【机器学习】回归的原理学习与葡萄酒数据集的最小二乘法线性回归实例

时间:2022-12-08 17:05:36浏览次数:48  
标签:linear train 回归 学习 test score print 乘法 wine

一,回归

1.1回归分析的基本概念

回归分析(regression analysis)指的是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法

  • 确定变量之间是否存在相关关系,若存在,则找出数学表达式
  • 根据一个或几个变量的值,预测或控制另一个或几个变量的值,且估计这种控制或预测可以达到何种精确度。

1.2线性回归

线性回归:线性模型就是对输入特征加权求和,再加上一个我们称为偏置项(也称为截距项)的常数,以此进行预测。

image-20221107194530501

image-20221107194539014

image-20221107194726046

1.3最小二乘法

最小二乘法是一种在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具。

最小二乘法是解决曲线拟合问题最常用的方法。其基本思路是:令

image-20221107200816313

现在问题就转化为求J。的最小值问题。 具体的做法是: 1)对目标函数求导

2)零其导数为0,求得极值如果函数是凸函数,极值点就是最值点。这即是著名方法一最小二乘的基本思想。

image-20221107201019234

image-20221107201035716

1.4一元(简单)线性回归模型

建立两个变量之间的数学模型:

image-20221107195253166

Y表示销售价格,称作被解释变量,X表示房屋面积,称作解释变量,image-20221107195354195image-20221107195401434为回归系数(待估参数),u为随机误差项(也称随机扰动项)。

上式只含一个解释变量,变量间的关系是线性的,称为一元线性回归模型(简单线性回归模型)

image-20221107195135852

简单线性回归模型引入随机误差项,主要有以下几方面的原因:

1)作为未知影响因素的代表;

2)作为无法取得数据的己知因素的代表;

3)作为众多细小影响因素的综合代表;

4)模型的设定误差;

5)变量的观测误差;

6)经济现象的内在随机性。

1.4.1随机误差项(线性回归模型)的假定条件

image-20221107195550283

1.4.2参数的普通最小二乘估计(0LS)

image-20221107195911002

为求总体参数image-20221107201234371的估计值image-20221107201242838,使用普通最小二乘法。

普通最小二乘法(Ordinary least squares,.OLS)给出的判断标准是:拟合直线的残差平方和达到最小。

image-20221107201142468

image-20221107200334568

image-20221107201620112

称为OLS估计量的离差形式(deviation form)。

由于参数的估计结果是通过最小二乘法得到的,故称为普通最小二乘估计量(ordinary leastsquares estimators)。

1.5葡萄酒数据集的最小二乘法线性回归实例

1.导入葡萄酒数据集

from sklearn.datasets import load_wine
wine = load_wine()
X = wine.data
y = wine.target

2.使用最小二乘法线性回归:

from sklearn import linear_model
linear = linear_model.LinearRegression()

3.对其进行预测:

import numpy as np
linear.fit(X[:,:1],y)
y_predicted = np.dot(X[:,:1],linear.coef_)+linear.intercept_

4.将预测值和,原本的值进行输出,和原本值减去预测值得到结果如下:

print("y",y_predicted)
print("mean(y)",np.mean(y))
print("mean(y')",np.mean(y_predicted))
print("Y-Y'",np.sum(y-y_predicted))

输出如下:

image-20221107204041192

  1. 对13个特征进行俩俩组合,并且不重复:
linear = linear_model.LinearRegression()
x_list = []
for j in range(0, 13):
    for i in range(j+1, 13):

6.输出13个特征进行俩俩组合的预测得分最大值:

        if j != i:
            print(j, i)
            x_local = X[:, [j, i]]
            linear.fit(x_local, y)
            print("score", linear.score(x_local, y))
            x_list.append(linear.score(x_local, y))
            print(linear.coef_)
            print(linear.intercept_)

print(x_list)
print("最大值为", max(x_list))

结果如下:

image-20221108111121697

  1. 切分数据集:测试集 30%:
wine_X_train, wine_X_test, wine_y_train, wine_y_test = train_test_split(X, y, test_size=0.1*i, random_state=0)

8.线性回归进行训练得分:

from sklearn import linear_model
model = linear_model.LinearRegression()
model.fit(wine_X_train,wine_y_train)
train_score.append(model.score(wine_X_train,wine_y_train)*100)
test_score.append(model.score(wine_X_test,wine_y_test)*100)
print("train:",model.score(wine_X_train,wine_y_train))
print("test:",model.score(wine_X_test,wine_y_test))

9.画图,可视化观察

plt.plot(x,train_score,label="Train")
plt.plot(x,test_score,label="Test")
plt.legend(loc='best')
plt.show()

输出如下:

train_score: [91.03676416293968, 91.9071553176753, 91.54585590997156, 92.66522947292925, 94.11247607913444, 93.75429953765662, 94.77044261319818, 94.48210580122965]
test_score: [75.18096058648021, 76.43759153956302, 84.36193575843113, 83.54234051618413, 81.22672208926059, 83.80201986070868, 82.0291448284772, 79.66827225108624]

结果如下:

image-20221108111329543

标签:linear,train,回归,学习,test,score,print,乘法,wine
From: https://blog.51cto.com/u_15568258/5920186

相关文章

  • LINQ学习
     varrest=frommastinmasterwheremast.level>6selectmast; //from后面设置查询的集合、where后面跟查询条件、表示mast的结果集合返回多条件:wheremast.......
  • gin源码学习-路由注册(2)
    gin框架主要是在标准库net/http的基础上对路由进行改写,本文将从net/http与gin的路由注册分享路由方面的一些理解。1.net/http的路由注册1.1路由注册首先来个demo:pack......
  • 深度学习炼丹-不平衡样本的处理
    前言一,数据层面处理方法1.1,数据扩充1.2,数据(重)采样数据采样方法总结1.3,类别平衡采样二,算法(损失函数)层面处理方法2.1,FocalLoss2.2,损失函数加权参考资料......
  • 强化学习——QLearning和Sarsa算法及其Python实现
    主要是强化学习的课程,作业中涉及到了QLearning和Sarsa算法,特此记录。宝藏博主的强化学习专栏中包含了这两个算法的讲解,极为清晰,非常推荐。链接:机器学习+深度学习+强化学......
  • Linux下学习FPGA
    声明(叠甲):鄙人水平有限,本文章仅供参考。1.环境推荐使用Ubuntu20.04这是我使用多个版本中最好用的一个,相关安装教程可以自行上网搜索这不再赘述,但要补充的一点的是......
  • junit 4学习
    JUNIT4中,有几个地方要注意一下的,归纳之1@Test(expected=ArithmeticException.class) public void3,Math.divide(9,3));      Math.di......
  • 黑马程序员3天玩转Python深度学习tensorflow(第1天)
    文章目录​​一、深度学习的介绍​​​​1.1深度学习与机器学习的区别​​​​1.1.1特征提取方面​​​​1.1.2数据量和计算性能要求​​​​1.1.3算法代表​​​​1.2......
  • 【李沐:动手学深度学习pytorch版】第3章:线性神经网络
    第3章线性神经网络3.1.线性回归3.1.1.线性回归的基本元素3.1.1.1.线性模型3.1.1.2.损失函数3.1.1.3.解析解线性回归刚好是一个很简单的优化问题。与我们将在本书中所......
  • JasperReport 学习必备手册
    这是我学习JasperReport的一点经验,欢迎大家指正、赐教,我只是起个砖块的作用,大家就接着抛玉吧,希望最后真的能累成一个必备手册,呵呵。假设大家已经对JasperReport有一定的......
  • Kaggle学习:A Journey through Titanic
    ​​https://kagglesds.blob.core.windows.net/script-versions/447794/notebook/__notebook__.ipynb?sv=2015-12-11&sr=b&sig=KfDPSVmALrMN7XeJ3j9GesHBJ8DP4qilENQX0byejt......