20day-人工智能-机器学习-线性回归
前面介绍了很多分类算法,分类的目标变量是标称型数据,回归是对连续型的数据做出预测。
标称型数据(Nominal Data)是统计学和数据分析中的一种数据类型,它用于分类或标记不同的类别或组别,数据点之间并没有数值意义上的距离或顺序。例如,颜色(红、蓝、绿)、性别(男、女)或产品类别(A、B、C)。
标称数据的特点:
无序性:标称数据的各个类别之间没有固有的顺序关系。例如,“性别”可以分为“男”和“女”,但“男”和“女”之间不存在大小、高低等顺序关系。
非数值性:标称数据不能进行数学运算,因为它们没有数值含义。你不能对“颜色”或“品牌”这样的标称数据进行加减乘除。
多样性:标称数据可以有很多不同的类别,具体取决于研究的主题或数据收集的目的。
比如西瓜的颜色,纹理,敲击声响这些数据就属于标称型数据,适用于西瓜分类
连续型数据(Continuous Data)表示在某个范围内可以取任意数值的测量,这些数据点之间有明确的数值关系和距离。例如,温度、高度、重量等
连续型数据的特点包括:
可测量性:连续型数据通常来源于物理测量,如长度、重量、温度、时间等,这些量是可以精确测量的。
无限可分性:连续型数据的取值范围理论上是无限可分的,可以无限精确地细分。例如,你可以测量一个物体的长度为2.5米,也可以更精确地测量为2.53米,甚至2.5376米,等等。
数值运算:连续型数据可以进行数学运算,如加、减、乘、除以及求平均值、中位数、标准差等统计量。
在数据分析中,连续型数据的处理和分析方式非常丰富,常见的有:
描述性统计:计算均值、中位数、众数、标准差、四分位数等,以了解数据的中心趋势和分布情况。
概率分布:通过拟合概率分布模型,如正态分布、指数分布、伽玛分布等,来理解数据的随机特性。
图形表示:使用直方图、密度图、箱线图、散点图等来可视化数据的分布和潜在的模式。
回归分析:建立连续型变量之间的数学关系,预测一个或多个自变量如何影响因变量。
比如西瓜的甜度,大小,价格这些数据就属于连续型数据,可以用于做回归
1.什么是回归?
回归的目的是预测数值型的目标值y。最直接的办法是依据输入x写出一个目标值y的计算公式。假如你想预测小姐姐男友汽车的功率,可能会这么计算:
HorsePower = 0.0015 * annualSalary - 0.99 * hoursListeningToPublicRadio
写成中文就是:
小姐姐男友汽车的功率 = 0.0015 * 小姐姐男友年薪 - 0.99 * 收听公共广播的时间
这就是所谓的回归方程(regression equation),其中的0.0015和-0.99称为回归系数(regression weights),求这些回归系数的过程就是回归。一旦有了这些回归系数,再给定输入,做预测就非常容易了。具体的做法是用回归系数乘以输入值,再将结果全部加在一起,就得到了预测值。
2.线性回归
说到回归,一般都是指线性回归(linear regression)。线性回归意味着可以将输入项分别乘以一些常量,再将结果加起来得到输出。线性回归是机器学习中一种有监督学习的算法,回归问题主要关注的是因变量(需要预测的值)和一个或多个数值型的自变量(预测变量)之间的关系.
这个只是数学上的线性回归,
人工智能中的线性回归:数据集中,往往找不到一个完美的方程式来100%满足所有的y目标
我们就需要找出一个最接近真理的方程式
比如:
有这样一种植物,在不同的温度下生长的高度是不同的,对不同温度环境下,几颗植物的环境温度(横坐标),植物生长高度(纵坐标)的关系进行了采集,并且将它们绘制在一个二维坐标中,其分布如下图所示:
坐标分别为[4.2, 3.8],[4.2, 2.7],[2.7, 2.4],[0.8, 1.0],[3.7, 2.8],[1.7, 0.9],[3.2, 2.9]。
我们发现这些点好像分布在一条直线的附近,那么我们能不能找到这样一条直线,去“拟合”这些点,这样的话我们就可以通过获取环境的温度大概判断植物在某个温度下的生长高度了。
于是我们的最终目的就是通过这些散点来拟合一条直线,使该直线能尽可能准确的描述环境温度与植物高度的关系。
那我们怎么直到这个点勒?
3.损失函数
数据: [[4.2, 3.8],[4.2, 2.7],[2.7, 2.4],[0.8, 1.0],[3.7, 2.8],[1.7, 0.9],[3.2, 2.9]]
我们假设 这个最优的方程是:
y=wx+b
这样的直线随着w和b的取值不同 可以画出无数条
在这无数条中,哪一条是比较好的呢?
我们有很多方式认为某条直线是最优的,其中一种方式:均方差,求每个点的x的到线的水平距离的绝对值之和,是不是都能反映,但是这些都不是最好的,最好的就是每个点到线的竖直方向的距离平方 求和 在平均 最小时 这条直接就是最优直线
为什么勒?我们设直线的线性公式为y=wx + b,这些点到直线的垂直距离是不是可以衡量为真实值与测试值的误差,而我们不正是要求出这个误差小的那条直线么。
然后我们这么一算,就得到了我们的损失函数
我们要求出这个函数值的最小是不是有很多种方式。均方误差最小的那个附近。w系数这条直线是不是很接近这些数据点。
4.多参数回归
上面案例中,实际情况下,影响这种植物高度的不仅仅有温度,还有海拔,湿度,光照等等因素:
实际情况下,往往影响结果y的因素不止1个,这时x就从一个变成了n个,x_1,x_2,x_3...x_n 上面的思路是对的,但是求解的公式就不再适用了
案例: 假设一个人健康程度怎么样,由很多因素组成
被爱 | 学习指数 | 抗压指数 | 运动指数 | 饮食情况 | 金钱 | 心态 | 压力 | 健康程度 |
---|---|---|---|---|---|---|---|---|
0 | 14 | 8 | 0 | 5 | -2 | 9 | -3 | 339 |
-4 | 10 | 6 | 4 | -14 | -2 | -14 | 8 | -114 |
-1 | -6 | 5 | -12 | 3 | -3 | 2 | -2 | 30 |
5 | -2 | 3 | 10 | 5 | 11 | 4 | -8 | 126 |
-15 | -15 | -8 | -15 | 7 | -4 | -12 | 2 | -395 |
11 | -10 | -2 | 4 | 3 | -9 | -6 | 7 | -87 |
-14 | 0 | 4 | -3 | 5 | 10 | 13 | 7 | 422 |
-3 | -7 | -2 | -8 | 0 | -6 | -5 | -9 | -309 |
11 | 14 | 8 | 10 | 5 | 10 | 8 | 1 | ? |
求如果karen的各项指标是:
被爱:11 学习指数:14 抗压指数:8 运动指数:10 饮食水平:5 金钱:10 心态:8 压力:1
那么karen的健康程度是多少?
直接能想到的就是八元一次方程求解:
14w_2+8w_3+5w_5+-2w_6+9w_7+-3w_8=399
-4w_1+10w_2+6w_3+4w_4+-14w_5+-2w_6+-14w_7+8w_8=-144
-1w_1+-6w_2+5w_3+-12w_4+3w_3+-3w_6+2w_7+-2w_8=30
5w_1+-2w_2+3w_3+10w_4+5w_5+11w_6+4w_7+-8w_8=126
-15w_1+-15w_2+-8w_3+-15w_4+7w_5+-4w_6+-12w_7+2w_8=126
11w_1+-10w_2+-2w_3+4w_4+3w_5+-9w_6+-6w_7+7w_8=-87
-14w_1+4w_3+-3w_4+5w_5+10w_6+13w_7+7w_8=422
-3w_1+-7w_2+-2w_3+-8w_4+-6w_6+-5w_7+-9w_8=-309
解出 权重 w(w_1,w_2...w_8) 然后带入即可求出karen的健康程度
权重即重要程度,某一项的权重越大说明它影响最终健康的程度越大
但是这有一个前提:这个八元一次方程组得有解才行
因此我们还是按照损失最小的思路来求权重 w(w_1,w_2...w_8)
多元线性回归:
y = w1 * x1 + w2 * x2 + ... +wn * xn + b
b是截距,我们也可以使用w_0来表示只要是个常量就行
那么损失函数就是
如何求得对应的W{(w_1,w_2..w_0)} 使得loss最小呢?
数学家高斯给出了答案
5.最小二乘法MSE (不必在意)
实际模型中的参数是很多的,上亿都不是问题,所以使用这个方式计算量很大,现在的计算机算力还达不到,目前还是一个理论计算方式。
x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x0 | y |
---|---|---|---|---|---|---|---|---|---|
0 | 14 | 8 | 0 | 5 | -2 | 9 | -3 | 1 | 339 |
-4 | 10 | 6 | 4 | -14 | -2 | -14 | 8 | 1 | -114 |
-1 | -6 | 5 | -12 | 3 | -3 | 2 | -2 | 1 | 30 |
5 | -2 | 3 | 10 | 5 | 11 | 4 | -8 | 1 | 126 |
-15 | -15 | -8 | -15 | 7 | -4 | -12 | 2 | 1 | -395 |
11 | -10 | -2 | 4 | 3 | -9 | -6 | 7 | 1 | -87 |
-14 | 0 | 4 | -3 | 5 | 10 | 13 | 7 | 1 | 422 |
-3 | -7 | -2 | -8 | 0 | -6 | -5 | -9 | 1 | -309 |
5.1前景知识: 矩阵相关公式
5.2最小二乘法
h(x)=w_1x_1+w_2x_2+w_3x_3+w_4x_4+w_5x_5+w_6x_6+w_7x_7+w_8x_8+w_0x_0
高斯把公式给了,但是何时loss最小呢?
第二种方式链式求导(推荐,因为后期深度学习全是这种):(就是复合函数求导)
有了W,回到最初的问题:我们就能求karen的健康程度,但是这只是数学方式的计算,虽然算的很准,但是现在计算机还不能用他算数据量很大的问题,计算机的方式则是自己找出来一个,不一定很准,但是很接近,怎么找,后面我们在介绍。
5.3 API
sklearn.linear_model.LinearRegression() 功能: 普通最小二乘法线性回归, 权重和偏置是直接算出来的,对于数量大的不适用,因为计算量太大,计算量太大的适合使用递度下降法参数: fit_intercept bool, default=True是否计算此模型的截距(偏置)。如果设置为False,则在计算中将不使用截距(即,数据应中心化)。 属性: coef_ 回归后的权重系数 intercept_ 偏置print("权重系数为:\n", estimator.coef_) #权重系数与特征数一定是同样的个数。 print("偏置为:\n", estimator.intercept_)
5.4 示例代码
from sklearn.linear_model import LinearRegression
import numpy as np
data=np.array([[0,14,8,0,5,-2,9,-3,399],[-4,10,6,4,-14,-2,-14,8,-144],[-1,-6,5,-12,3,-3,2,-2,30],[5,-2,3,10,5,11,4,-8,126],[-15,-15,-8,-15,7,-4,-12,2,-395],[11,-10,-2,4,3,-9,-6,7,-87],[-14,0,4,-3,5,10,13,7,422],[-3,-7,-2,-8,0,-6,-5,-9,-309]])
x=data[:,0:8]
y=data[:,8:]
estimator=LinearRegression(fit_intercept=False)
estimator.fit(x,y)
print("权重系数为:\n", estimator.coef_) #权重系数与特征数一定是同样的个数。
print("偏置为:\n", estimator.intercept_)
x_new=[[11,14,8,10,5,10,8,1]]
y_predict=estimator.predict(x)
print("预测结果:\n",y_predict)
print(-3*0.4243965-7*7.32281732-2*15.05217218-8*3.5996297+0*12.05805264-6*1.76972959-5*17.0276393-9*11.31212591)