机器学习03——数据与算法初步2
机器学习
机器学习01——初识机器学习
机器学习02——数据与算法初步
文章目录
- 机器学习
- 一、决策树
- 1.1 什么是决策树
- 1.2 信息增益
- (1) 信息熵
- (2) 信息增益
- (3) 示例
- 1.3 基尼指数
- 1.4 api与示例
- 1.5 随机森林
- 二、线性回归
- 2.1 什么是线性回归
- 2.2 损失函数
- 2.3 多参数回归
- 总结
一、决策树
1.1 什么是决策树
在现实生活中,我们往往是通过一件事物的外在特征来判断,它究竟是什么的。例如我们判断一种生物它究竟是不是鸟类时,往往可以通过以下特征进行判断。

其决策过程类似于一种树状结构:
我们就可以将这种决策方式称之为决策树。
- 优点:
可视化,可解释,对算力要求低 - 缺点:
深度太大了容易产生过拟合。
在上面的例子中,我们通过多个特征联合决策来判断。但为什么我们判断条件是从是否是动物开始的?关于决策条件的判断顺序,我们可以通过信息增益或基尼指数来判断什么样的决策顺序是更合理的。
1.2 信息增益
信息增益决策树倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息,算法只能对描述属性为离散型属性的数据集构造决策树。
(1) 信息熵
信息熵描述的是不确定性。信息熵越大,不确定性越大。信息熵的值越小,则样本集合的纯度越高。假设样本集合D共有N类,第k类样本所占比例为pkp_kpk,则D的信息熵为H(D)=−∑k=1Npklog2pk\mathrm{H}(D) = -\sum_{k=1}^{N} p_k \log_2 p_kH(D)=−∑k=1Npklog2pk。
(2) 信息增益
信息增益是一个统计量,用来描述一个属性区分数据样本的能力。信息增益越大,那么决策树就会越简洁。这里信息增益的程度用信息熵的变化程度来衡量, 信息增益公式:IG(Y∣X)=H(Y)−H(Y∣X)≥0\mathrm{IG}(Y \mid X) = \mathrm{H}(Y) -\mathrm{H}(Y\mid X) \geq 0IG(Y∣X)=H(Y)−H(Y∣X)≥0。
(3) 示例
根据以下信息构建一棵预测是否贷款的决策树。我们可以看到有4个影响因素:职业,年龄,收入和学历。
职业 | 年龄 | 收入 | 学历 | 是否贷款 | |
---|---|---|---|---|---|
1 | 工人 | 36 | 5500 | 高中 | 否 |
2 | 工人 | 42 | 2800 | 初中 | 是 |
3 | 白领 | 45 | 3300 | 小学 | 是 |
4 | 白领 | 25 | 10000 | 本科 | 是 |
5 | 白领 | 32 | 8000 | 硕士 | 否 |
6 | 白领 | 28 | 13000 | 博士 | 是 |
第一步,计算根节点的信息熵
上表根据是否贷款把样本分成2类样本,"是"占4/6=2/3, "否"占2/6=1/3,
所以
第二步,计算属性的信息增益
<1> "职业"属性的信息增益 IG(D,′职业′)\mathrm{IG}(D,'职业')IG(D,′职业′)
在职业中,工人占1/3, 工人中,是否代款各占1/2, 所以有 −13(12log212+12log212)- \frac{1}{3} \left( \frac{1}{2} \log_2 \frac{1}{2} + \frac{1}{2} \log_2 \frac{1}{2} \right)−31(21log221+21log221),
在职业中,白领占2/3, 白领中,是贷款占3/4, 不贷款占1/4, 所以有 −23(34log234+14log214)- \frac{2}{3} \left( \frac{3}{4} \log_2 \frac{3}{4} + \frac{1}{4} \log_2 \frac{1}{4} \right)−32(43log243+41log241)。
所以有
H(′职业′)=−13(12log212+12log212)−23(34log234+14log214)≈0.867\mathrm{H}('职业') = - \frac{1}{3} \left( \frac{1}{2} \log_2 \frac{1}{2} + \frac{1}{2} \log_2 \frac{1}{2} \right)- \frac{2}{3} \left( \frac{3}{4} \log_2 \frac{3}{4} + \frac{1}{4} \log_2 \frac{1}{4} \right) \approx 0.867H(′职业′)=−31(21log221+21log221)−32(43log243+41log241)≈0.867
最后得到职业属性的信息增益为:IG(D,′职业′)=H(D)−H(′职业′)=0.066\mathrm{IG}(D,'职业') = \mathrm{H}(D) - \mathrm{H}('职业') = 0.066IG(D,′职业′)=H(D)−H(′职业′)=0.066
实际API使用中,会有一个参数"深度", 属性中具体以多少为界会被根据深度调整。
<2>" 年龄"属性的信息增益(以35岁为界)
<3> "收入"属性的信息增益(以10000为界,大于等于10000为一类)
<4> "学历"属性的信息增益(以高中为界, 大于等于高中的为一类)
第三步, 划分属性
对比属性信息增益发现,"收入"和"学历"相等,并且是最高的,所以我们就可以选择"学历"或"收入"作为第一个决策树的节点, 接下来我们继续重复1,2的做法继续寻找合适的属性节点。
1.3 基尼指数
基尼指数(Gini Index)是决策树算法中用于评估数据集纯度的一种度量,基尼指数的数值衡量的是数据集的不纯度,或者说分类的不确定性。在构建决策树时,基尼指数被用来决定如何对数据集进行最优划分,以减少不纯度。
基尼指数的计算
对于一个二分类问题,如果一个节点包含的样本属于正类的概率是 (p),则属于负类的概率是 (1-p)。那么,这个节点的基尼指数 (Gini( p )) 定义为:
Gini(p)=1−p2−(1−p)2=2p(1−p)Gini(p) = 1 - p^2 - (1-p)^2 = 2p(1-p)Gini(p)=1−p2−(1−p)2=2p(1−p)
对于多分类问题,如果一个节点包含的样本属于第 k 类的概率是 pkp_kpk,则节点的基尼指数定义为:
Gini(p)=1−∑k=1Kpk2Gini(p) = 1 - \sum_{k=1}^{K} p_k^2Gini(p)=1−∑k=1Kpk2
基尼指数的意义
- 当一个节点的所有样本都属于同一类别时,基尼指数为 0,表示纯度最高。
- 当一个节点的样本均匀分布在所有类别时,基尼指数最大,表示纯度最低。
决策树中的应用
在构建决策树时,我们希望每个内部节点的子节点能更纯,即基尼指数更小。因此,选择分割特征和分割点的目标是使子节点的平均基尼指数最小化。具体来说,对于一个特征,我们计算其所有可能的分割点对应的子节点的加权平均基尼指数,然后选择最小化这个值的分割点。这个过程会在所有特征中重复,直到找到最佳的分割特征和分割点。
例如,考虑一个数据集 (D),其中包含 (N) 个样本,特征 (A) 将数据集分割为 ∣D1∣|D_1|∣D1∣和 ∣D2∣|D_2|∣D2∣ ,则特征 (A) 的基尼指数为:
GiniA=∣D1∣∣D∣Gini(D1)+∣D2∣∣D∣Gini(D2)Gini_A = \frac{|D_1|}{|D|} Gini(D_1) + \frac{|D_2|}{|D|} Gini(D_2)GiniA=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
其中 ∣D1∣|D_1|∣D1∣和 ∣D2∣|D_2|∣D2∣ 分别是子集 D1D_1D1 和 D2D_2D2 中的样本数量。
通过这样的方式,决策树算法逐步构建一棵树,每一层的节点都尽可能地减少基尼指数,最终达到对数据集的有效分类。
案例:
首先工资有两个取值,分别是0和1。当工资=0时,有5个样本,在这五个样本中,工作有3个是不好,2个是好。就有了以下式子:
当工资=1时同理,则有:
1.4 api与示例
示例:
from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split# 加载数据
wine=load_wine()
x=wine.data
y=wine.target
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)# 训练模型
model=DecisionTreeClassifier()
model.fit(x_train,y_train)
print(model.score(x_test,y_test))# 模型评估,计算准确率
score = model.score(x_test, y_test)
print("准确率为:\n", score)# 预测
index=model.predict([[i for i in range(13)]])
print("预测:\n",index,wine.target_names,wine.target_names[index])# 可视化决策树
export_graphviz(model, out_file="wine_tree.dot", feature_names=wine.feature_names)
1.5 随机森林
机器学习中有一种大类叫集成学习(Ensemble Learning),集成学习的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。集成算法可以说从一方面验证了中国的一句老话:三个臭皮匠,赛过诸葛亮。集成算法步骤大致如下:
(1)每次有放回地从训练集中取出 n 个训练样本,组成新的训练集;
(2)利用新的训练集,训练得到M个子模型;
(3)对于分类问题,采用投票的方法,得票最多子模型的分类类别为最终的类别;
随机森林就属于集成学习,是通过构建一个包含多个决策树(通常称为基学习器或弱学习器)的森林,每棵树都在不同的数据子集和特征子集上进行训练,最终通过投票或平均预测结果来产生更准确和稳健的预测。这种方法不仅提高了预测精度,也降低了过拟合风险,并且能够处理高维度和大规模数据集
示例·:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV# 加载数据
wine=load_wine()
x=wine.data
y=wine.target
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)
# 训练模型
model=RandomForestClassifier()
param_dict={"n_estimators":[i for i in range(10,50,10)],"max_depth":[5,10,15]}
model=GridSearchCV(model,param_grid=param_dict,cv=3)
model.fit(x_train,y_train)
# 模型评估
print(model.score(x_test,y_test))
print("最佳参数:\n", model.best_params_)
print("最佳结果:\n", model.best_score_)
print("最佳估计器:\n", model.best_estimator_)
print("交叉验证结果:\n", model.cv_results_)
二、线性回归
前面介绍了很多分类算法,分类的目标变量是标称型数据,回归是对连续型的数据做出预测。
标称型数据(Nominal Data)是统计学和数据分析中的一种数据类型,它用于分类或标记不同的类别或组别,数据点之间并没有数值意义上的距离或顺序。例如,颜色(红、蓝、绿)、性别(男、女)或产品类别(A、B、C)。
标称数据的特点:
- 无序性:标称数据的各个类别之间没有固有的顺序关系。例如,“性别”可以分为“男”和“女”,但“男”和“女”之间不存在大小、高低等顺序关系。
- 非数值性:标称数据不能进行数学运算,因为它们没有数值含义。你不能对“颜色”或“品牌”这样的标称数据进行加减乘除。
- 多样性:标称数据可以有很多不同的类别,具体取决于研究的主题或数据收集的目的。
- 比如西瓜的颜色,纹理,敲击声响这些数据就属于标称型数据,适用于西瓜分类
连续型数据(Continuous Data)表示在某个范围内可以取任意数值的测量,这些数据点之间有明确的数值关系和距离。例如,温度、高度、重量等
连续型数据的特点包括:
- 可测量性:连续型数据通常来源于物理测量,如长度、重量、温度、时间等,这些量是可以精确测量的。
- 无限可分性:连续型数据的取值范围理论上是无限可分的,可以无限精确地细分。例如,你可以测量一个物体的长度为2.5米,也可以更精确地测量为2.53米,甚至2.5376米,等等。
- 数值运算:连续型数据可以进行数学运算,如加、减、乘、除以及求平均值、中位数、标准差等统计量。
在数据分析中,连续型数据的处理和分析方式非常丰富,常见的有:
- 描述性统计:计算均值、中位数、众数、标准差、四分位数等,以了解数据的中心趋势和分布情况。
- 概率分布:通过拟合概率分布模型,如正态分布、指数分布、伽玛分布等,来理解数据的随机特性。
- 图形表示:使用直方图、密度图、箱线图、散点图等来可视化数据的分布和潜在的模式。
- 回归分析:建立连续型变量之间的数学关系,预测一个或多个自变量如何影响因变量。
- 比如西瓜的甜度,大小,价格这些数据就属于连续型数据,可以用于做回归。
2.1 什么是线性回归
回归的目的是预测数值型的目标值y。最直接的办法是依据输入x写出一个目标值y的计算公式。比如通过房屋面积预测房价,可以建立如下关系:
y^=w0+w1⋅x面积\hat{y} = w_0 + w_1 \cdot x_{\text{面积}}y^=w0+w1⋅x面积
其中:
y^\hat{y}y^:预测的房价(目标变量)
x面积x_ {面积}x面积:房屋面积(输入特征)
w0w_0w0:截距项(基准价格)
w1w_1w1:斜率(单位面积价格系数)
这就是所谓的回归方程(regression equation),其中的0.0015和-0.99称为回归系数(regression weights),求这些回归系数的过程就是回归。
说到回归,一般都是指线性回归(linear regression)。线性回归意味着可以将输入项分别乘以一些常量,再将结果加起来得到输出。线性回归是机器学习中一种有监督学习的算法,回归问题主要关注的是因变量(需要预测的值)和一个或多个数值型的自变量(预测变量)之间的关系.
- 需要预测的值:即目标变量,target,y
- 影响目标变量的因素:X1,X2...XnX_1,X_2...X_nX1,X2...Xn,可以是连续值也可以是离散值
- 因变量和自变量之间的关系:即模型,model,就是我们要求解的
比如1个包子是2元 3个包子是6元 预测5个包子多少钱
列出方程: $y=wx+b$
带入:2=w*1+b6=w*3+b
轻易求得 w=2 b=0
模型(x与y的关系): y=2*x+0
预测 x=5 时 target_y=2*5+0=10元
人工智能中的线性回归:数据集中,往往找不到一个完美的方程式来100%满足所有的y目标,这时我们就需要找出一个最接近完美的方程式
比如:
有这样一种植物,在不同的温度下生长的高度是不同的,对不同温度环境下,几颗植物的环境温度(横坐标),植物生长高度(纵坐标)的关系进行了采集,并且将它们绘制在一个二维坐标中,其分布如下图所示:
我们发现这些点好像分布在一条直线的附近,那么我们能不能找到这样一条直线,去“拟合”这些点,这样的话我们就可以通过获取环境的温度大概判断植物在某个温度下的生长高度了。
于是我们的最终目的就是通过这些散点来拟合一条直线,使该直线能尽可能准确的描述环境温度与植物高度的关系。
2.2 损失函数
上图中数据: [[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+by=wx+by=wx+b,这样的直线随着w和b的取值不同,可以画出无数条。在这无数条中,哪一条是比较好的呢?
我们有很多方式认为某条直线是最优的,其中一种方式:均方差,即就是每个点到线的竖直方向的距离平方求和再平均,其值最小时这条直接就是最优直线。
假设: y=wx+by=wx+by=wx+b,把x1,x2,x3...x_1,x_2,x_3...x1,x2,x3...带入进去 然后得出:
y1,=wx1+by_1^,=wx_1+by1,=wx1+b
y2,=wx2+by_2^,=wx_2+by2,=wx2+b
y3,=wx3+by_3^,=wx_3+by3,=wx3+b
…
然后计算y1−y1,{y_1-y_1^,}y1−y1, 表示第一个点的真实值和计算值的差值 ,然后把第二个点,第三个点…最后一个点的差值全部算出来,有的点在上面有点在下面,如果直接相加有负数和正数会抵消,体现不出来总误差,平方后就不会有这个问题了。
最后计算总误差(也就是传说中的损失):
loss1=(y1−y1,)2+(y2−y2,)2+....(yn−yn,)2loss1={(y_1-y_1^,)^2}+{(y_2-y_2^,)^2}+....{(y_n-y_n^,)^2}loss1=(y1−y1,)2+(y2−y2,)2+....(yn−yn,)2
平均误差(总误差会受到样本点的个数的影响,样本点越多,该值就越大,所以我们可以对其平均化,求得平均值,这样就能解决样本点个数不同带来的影响),这样就得到了传说中的损失函数:
eˉ=1n∑i=1n(yi−wxi−b)2\bar e = \frac{1}{n} \textstyle\sum_{i=1}^{n}(y_{i}-w x_{i} - b)^{2}eˉ=n1∑i=1n(yi−wxi−b)2
为了让这个损失函数的值最小,我们需要确定w的值,也就是求出w的函数。为了简化我们先假设b=0,b(也叫偏置)的求解我们在之后会提到。
eˉ=1n∑i=1n(wxi−yi)2=1n∑i=1nxi2w2−2n∑i=1nxiyiw+1n∑i=1nyi2xi,yi都是已知的因此:=aw2+bw+c=10w2−15.9w+6.5\begin{aligned} \bar e &=\frac{1}{n} \textstyle\sum_{i=1}^{n}(w x_{i}-y_{i})^{2}\\ &={\frac{1}{n}}\sum_{i=1}^{n}x_{i}^{2}w^{2}-{\frac{2}{n}}\sum_{i=1}^{n} x_{i}y_{i}w+{\frac{1}{n}}\sum_{i=1}^{n} y_{i}^{2}\\ &x_i,y_i都是已知的因此:\\ &= {a w^{2}+b w+c} \\ &= 10w^{2}-15.9w+6.5 \end{aligned} eˉ=n1∑i=1n(wxi−yi)2=n1i=1∑nxi2w2−n2i=1∑nxiyiw+n1i=1∑nyi2xi,yi都是已知的因此:=aw2+bw+c=10w2−15.9w+6.5
然后就只需要算w在什么情况下损失函数的值最小(初中的抛物线求顶点的横坐标,高中求导数为0时),求得w=0.795时损失函数取得最小值
那我们最终那个真理函数(最优解)就得到了
y=0.795x+0y=0.795x+0y=0.795x+0
总结:
1.实际数据中 x和y组成的点 不一定是全部落在一条直线上
2.我们假设有这么一条直线 y=wx+by=wx+by=wx+b 是最符合描述这些点的
3.最符合的条件就是这个方程带入所有x计算出的所有y与真实的y值做 均方差计算
4.找到均方差最小的那个w
5.这样就求出了最优解的函数(前提条件是假设b=0)
2.3 多参数回归
上面案例中影响这种植物高度的仅有温度。实际情况下,往往影响结果y的因素不止1个,这时x就从一个变成了n个,x1,x2,x3...xnx_1,x_2,x_3...x_nx1,x2,x3...xn 上面的思路是对的,但是求解的公式就不再适用了。
这里给出多参数回归的一个例子:
被爱 | 学习指数 | 抗压指数 | 运动指数 | 饮食情况 | 金钱 | 心态 | 压力 | 健康程度 |
---|---|---|---|---|---|---|---|---|
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 |
如果karen的各项指标是:
被爱:11 学习指数:14 抗压指数:8 运动指数:10 饮食水平:5 金钱:10 心态:8 压力:1。
那么求karen的健康程度?
直接能想到的就是八元一次方程求解:
14w2+8w3+5w5+−2w6+9w7+−3w8=39914w_2+8w_3+5w_5+-2w_6+9w_7+-3w_8=39914w2+8w3+5w5+−2w6+9w7+−3w8=399
−4w1+10w2+6w3+4w4+−14w5+−2w6+−14w7+8w8=−144-4w_1+10w_2+6w_3+4w_4+-14w_5+-2w_6+-14w_7+8w_8=-144−4w1+10w2+6w3+4w4+−14w5+−2w6+−14w7+8w8=−144
−1w1+−6w2+5w3+−12w4+3w3+−3w6+2w7+−2w8=30-1w_1+-6w_2+5w_3+-12w_4+3w_3+-3w_6+2w_7+-2w_8=30−1w1+−6w2+5w3+−12w4+3w3+−3w6+2w7+−2w8=30
5w1+−2w2+3w3+10w4+5w5+11w6+4w7+−8w8=1265w_1+-2w_2+3w_3+10w_4+5w_5+11w_6+4w_7+-8w_8=1265w1+−2w2+3w3+10w4+5w5+11w6+4w7+−8w8=126
−15w1+−15w2+−8w3+−15w4+7w5+−4w6+−12w7+2w8=126-15w_1+-15w_2+-8w_3+-15w_4+7w_5+-4w_6+-12w_7+2w_8=126−15w1+−15w2+−8w3+−15w4+7w5+−4w6+−12w7+2w8=126
11w1+−10w2+−2w3+4w4+3w5+−9w6+−6w7+7w8=−8711w_1+-10w_2+-2w_3+4w_4+3w_5+-9w_6+-6w_7+7w_8=-8711w1+−10w2+−2w3+4w4+3w5+−9w6+−6w7+7w8=−87
−14w1+4w3+−3w4+5w5+10w6+13w7+7w8=422-14w_1+4w_3+-3w_4+5w_5+10w_6+13w_7+7w_8=422−14w1+4w3+−3w4+5w5+10w6+13w7+7w8=422
−3w1+−7w2+−2w3+−8w4+−6w6+−5w7+−9w8=−309-3w_1+-7w_2+-2w_3+-8w_4+-6w_6+-5w_7+-9w_8=-309−3w1+−7w2+−2w3+−8w4+−6w6+−5w7+−9w8=−309
权重即重要程度,某一项的权重越大说明它影响最终健康的程度越大。解出 权重 w(w1,w2...w8)w(w_1,w_2...w_8)w(w1,w2...w8) 然后带入即可求出karen的健康程度。但**:这个八元一次方程组得有解才行**。
因此我们还是按照损失最小的思路来求权重 w(w1,w2...w8)w(w_1,w_2...w_8)w(w1,w2...w8),将健康与各项指标的关系抽象成如下式子:
y′=w1x1+w2x2+....wnxn+by' =w_1x_1+w_2x_2+....w_nx_n+by′=w1x1+w2x2+....wnxn+b
b是截距,我们也可以使用w0w_0w0来表示只要是个常量就行
y′=w1x1+w2x2+....wnxn+w0∗1y' =w_1x_1+w_2x_2+....w_nx_n+w_0*1y′=w1x1+w2x2+....wnxn+w0∗1
写成矩阵形式则有
(y^(1)y^(2)⋮y^(m))=(x1(1)⋯xn(1)1x1(2)⋯xn(2)1⋮⋮⋱⋮x1(m)⋯xn(m)1)(w0w1⋮wn)\begin{pmatrix} \hat{y}^{(1)} \\ \hat{y}^{(2)} \\ \vdots \\ \hat{y}^{(m)} \end{pmatrix} = \begin{pmatrix} x_1^{(1)} & \cdots & x_n^{(1)} & 1 \\ x_1^{(2)} & \cdots & x_n^{(2)} & 1 \\ \vdots & \vdots & \ddots & \vdots \\ x_1^{(m)} & \cdots & x_n^{(m)} & 1 \end{pmatrix} \begin{pmatrix} w_0 \\ w_1 \\ \vdots \\ w_n \end{pmatrix} y^(1)y^(2)⋮y^(m)=x1(1)x1(2)⋮x1(m)⋯⋯⋮⋯xn(1)xn(2)⋱xn(m)11⋮1w0w1⋮wn
令真实值Y=(y(1)y(2)⋮y(m)){{Y}}=\begin{pmatrix} {y}^{(1)} \\ {y}^{(2)} \\ \vdots \\ {y}^{(m)} \end{pmatrix}Y=y(1)y(2)⋮y(m),预测值Y^=(y^(1)y^(2)⋮y^(m))\hat{{Y}}=\begin{pmatrix} \hat{y}^{(1)} \\ \hat{y}^{(2)} \\ \vdots \\ \hat{y}^{(m)} \end{pmatrix}Y^=y^(1)y^(2)⋮y^(m),
X=(x1(1)⋯xn(1)1x1(2)⋯xn(2)1⋮⋮⋱⋮x1(m)⋯xn(m)1)X=\begin{pmatrix} x_1^{(1)} & \cdots & x_n^{(1)} & 1 \\ x_1^{(2)} & \cdots & x_n^{(2)} & 1 \\ \vdots & \vdots & \ddots & \vdots \\ x_1^{(m)} & \cdots & x_n^{(m)} & 1 \end{pmatrix}X=x1(1)x1(2)⋮x1(m)⋯⋯⋮⋯xn(1)xn(2)⋱xn(m)11⋮1,权重W=(w0w1⋮wn)W=\begin{pmatrix} w_0 \\ w_1 \\ \vdots \\ w_n \end{pmatrix}W=w0w1⋮wn
那么损失函数就是loss=1n∣∣Y^−Y∣∣2=1n∣∣XW−Y∣∣2loss=\frac{1}{n}||\hat{{Y}}-Y||^2=\frac{1}{n}||XW-Y||^2loss=n1∣∣Y^−Y∣∣2=n1∣∣XW−Y∣∣2。当n=2时,loss=12∣∣XW−Y∣∣2loss=\frac{1}{2}||XW-Y||^2loss=21∣∣XW−Y∣∣2就是最小二乘法公式。其中形如∣∣A∣∣2||A||^2∣∣A∣∣2是欧几里得范数的平方,也就是每个元素的平方相加。
若要求得对应的W(w1,w2..w0)W{(w_1,w_2..w_0)}W(w1,w2..w0) 使得loss最小呢,则可以对损失函数求导有loss′=(XW−y)XTloss'=(XW - y) X^Tloss′=(XW−y)XT,解loss′=0loss'=0loss′=0得W=(XTX)−1XTyW=(X^TX)^{-1}X^TyW=(XTX)−1XTy,X与Y均已知,则可得W。
示例代码:
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:]
# 训练模型
model=LinearRegression()
model.fit(x,y)
print('模型系数:\n',model.coef_)
print('模型截距:\n',model.intercept_)
# 预测
new_x=[[1,2,3,4,5,6,7,8]]
y_new=model.predict(new_x)
print('预测结果:\n',y_new)
总结
本文讲解了机器学习中的决策树算法,并初步讲解了线性回归这一概念。