引言
本人数学功底并不是非常的出色 所以其笔记内容有部分借鉴了网络大佬的解释说明
下面进入正题!!!
什么是机器学习
1、解释说明:
机器学习是一种人工智能领域的技术,它使计算机系统能够通过分析和学习数据来自动改进其性能。在机器学习中,算法会从大量数据中学习规律和模式,并根据这些规律对新的数据进行预测或做出决策。机器学习可以分为监督学习、无监督学习、半监督学习和强化学习等类型。
2、使用示例:
在Python中,我们可以使用scikit-learn库来实现机器学习算法。以下是一个简单的线性回归示例:
python
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import numpy as np
# 创建数据集
X = np.random.rand(100, 1)
y = 2 * X + 1 + 0.1 * np.random.randn(100, 1)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建线性回归模型
model = LinearRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估模型
score = model.score(X_test, y_test)
print("模型评分:", score)
3、注意事项:
- 在进行机器学习时,需要确保数据集的质量和数量,以便算法能够从中学到有效的规律。
- 选择合适的机器学习算法和参数对于解决问题至关重要。不同的问题可能需要不同的算法和参数设置。
- 防止过拟合和欠拟合。过拟合是指模型在训练集上表现很好,但在测试集上表现较差;欠拟合是指模型在训练集和测试集上都表现不佳。可以通过交叉验证、正则化等方法来缓解这些问题。
- 注意模型的解释性和可扩展性。在实际应用中,我们需要理解模型的预测结果,并在需要时对其进行调整和优化。
监督学习
监督学习是已经知道数据的label,例如预测房价问题,给出了房子的面积和价格。
-
回归问题是预测连续值的输出,例如预测房价。
-
分类问题是预测离散值输出,例如判断肿瘤是良性还是恶性。
无监督学习
无监督学习是不知道数据具体的含义,比如给定一些数据但不知道它们具体的信息,对于分类问题无监督学习可以得到多个不同的聚类,从而实现预测的功能。
线性回归
线性回归是拟合一条线,将训练数据尽可能分布到线上。另外还有多变量的线性回归称为多元线性回归。
代价函数
cost function,一般使用最小均方差来评估参数的好坏。
梯度下降
梯度下降,首先为每个参数赋一个初值,通过代价函数的梯度,然后不断地调整参数,最终得到一个局部最优解。初值的不同可能会得到两个不同的结果,即梯度下降不一定得到全局最优解。
梯度下降在具体的执行时,每一次更新需要同时更新所有的参数。
梯度下降公式中有两个部分,学习率和偏导数。
偏导数,用来计算当前参数对应代价函数的斜率,导数为正则θ减小,导数为负则θ增大,通过这样的方式可以使整体向θ=0收敛。
α用来描述学习率,即每次参数更新的步长。α的大小不好确定,如果太小则需要很多步才能收敛,如果太大最后可能不会收敛甚至可能发散。
当θ处于局部最优解时,θ的值将不再更新,因为偏导为0。
这也说明了如果学习率α不改变,参数也可能收敛,假设偏导>0> 0>0,因为偏导一直在向在减小,所以每次的步长也会慢慢减小,所以α不需要额外的减小。
单元梯度下降
梯度下降每次更新的都需要进行偏导计算,这个偏导对应线性回归的代价函数。
对代价函数求导的结果为:
梯度下降的过程容易出现局部最优解:
但是线性回归的代价函数,往往是一个凸函数。它总能收敛到全局最优。
梯度下降过程的动图展示:
多元梯度下降
通常问题都会涉及到多个变量,例如房屋价格预测就包括,面积、房间个数、楼层、价格等
因此代价函数就不再只包含一个变量,为了统一可以对常量引入变量x0=1
虽然参数的个数增多,但是对每个参数求偏导时和单个参数类似。
特征缩放
多个变量的度量不同,数字之间相差的大小也不同,如果可以将所有的特征变量缩放到大致相同范围,这样会减少梯度算法的迭代。
特征缩放不一定非要落到[-1,1]之间,只要数据足够接近就可以。
缩放后的还原
学习率
学习率α的大小会影响梯度算法的执行,太大可能会导致算法不收敛,太小会增加迭代的次数。
可以画出每次迭代的J(θ)的变化,来判断当前算法执行的情况,然后选择合适的学习率。(调参开始...)
Batch梯度下降:每一步梯度下降,都需要遍历整个训练集样本。
矩阵和向量
一些数学计算转化为矩阵的形式,可以简化代码书写、提高效率、代码更容易理解。
矩阵乘法不满足交换律:
矩阵乘法满足结合律:
单位矩阵:
矩阵的逆:
- 首先是方阵
- 不是所有的矩阵都有逆
转置矩阵:
正则方程
偏导等于0对应线性方程的最小值:
利用线性代数的方法直接求解θ
矩阵可能存在 不可逆的情况,这时可是删除一些不必要的特征,或使用正则化。
梯度下降和正则方程的优缺点:
逻辑回归
Logistic Regression
逻辑回归用于解决分类的问题,如果使用线性回归可能会造成很大的误差;假如样本的标签值为0、1,线性回归输出值是连续的存在>1和小于0的情况,不符合实际。
如果对于一个均匀的数据,使用线性回归,选取0.5作为分界线,可能会得到一个比较准确的模型,但是如果数据不太均匀就会存在很大的误差。
激活函数
python
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-10, 10, 100)
y = 1 / (1 + np.exp(-x))
plt.xlabel('X')
plt.ylabel('Y')
yticks = np.linspace(0, 1, 11)
plt.yticks(yticks)
plt.text(-10, 1, r'$f(x)\ =\ \frac{1}{1+e^{-x}}$',
fontdict={'size': 16, 'color': 'b'})
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))
plt.plot(x, y)
plt.show()
激活函数的y值分布在[0,1]内,对于分类问题,我们可以使用激活函数的值来表示满足特征的概率
决策界限
决策边界是假设函数的一个属性,取决于函数的参数,而不是数据集。
代价函数
逻辑回归一般使用对数函数作为代价函数:
首先对于分类函数来说,他的输出值范围为[0,1],得到的对数图像如下:
当评估模型参数对y=1(恶性肿瘤)进行预测的好坏时,如果实际为恶性,预测值也为1(恶性),此时的代价为0;如果实际为恶性,预测为0(良性),此时的代价为+∞,这时代价函数就很好的评估了参数θ的表现。
同样对于y=0(良性肿瘤)的代价函数为:
y的取值只有0、1,可以将上面两个函数合成一个,评估当前参数的J(θ)为:
梯度下降
在确定代价函数之后的任务是,如何最小化代价函数,因为代价函数是凸的,所以可以使用梯度下降求解。
虽然求偏导之后,θ\thetaθ更新的形式和线性回归类似,但是他们本质不同,因为hθ(x)完全不一样。
多元分类
对每个特征单独训练,在做预测的时候,取三个分类器结果最大的。
过拟合
存在多个特征,但是数据很少,或者模型函数不合理,都会出现过拟合的现象。过拟合可能对样本数能够很好的解释,但是无法正确的预测新数据。
正则化
解决过拟合的方法:
正则化处理过拟合问题:
在代价函数中加入正则项,通过lambda的来平衡拟合程度和参数的大小,θ越大越容易出现过拟合的现象。
如果lambda过大,导致θ≈0,那么最终只剩下下θ0,图像将变成一个直线。
模型评估
训练、测试集
将数据集分为训练集和测试集,训练集得到参数θ,然后使用测试集的数据对参数θ进行评估,即计算误差
线性回归问题的评估:
逻辑回归问题的评估:
训练、验证、测试集
首先用训练集得到一个最优的参数θ,然后用测试集进行评估误差。通过这样的方式可以在众多模型中选择一个理想的模型。
但是这样做并不能评估模型的泛化能力,通过测试集评估选择的模型,可能刚好适合测试集的数据,并不能说明它对其他数据的预测能力,这时就引入了验证集。
将数据集分为:训练集、验证集、测试集。
对于每个集合都可以计算相应的误差。
这样在选择模型的时候,可以先使用测试集得到每个模型的θ,然后使用验证集评估得到误差最小的模型,最后使用测试集评估他的泛化能力。
偏差、方差
当多项式次数增大时,训练集的误差慢慢减小,因为多项式次数越高,图像拟合的就越准确。但是验证集不同,它的趋势是先减少后增大,这分别对应着欠拟合和过拟合。
那么我们可以根据误差的不同表现来区分偏差和方差。
高偏差:训练误差和验证误差都很大。
高方差:训练误差小,验证误差大。
正则化
通过引入λ来平衡多形式的权重。
当λ太大,参数θ≈0,模型近似直线,即欠拟合。当λ太小,就会出现过拟合。
学习曲线
高偏差的模型的学习曲线:
高方差的模型的学习曲线:
高方差的特点是训练误差和验证误差之间有很大的差距,这时可以选择增加数据,随着图像右移可以看出训练误差和验证误差会慢慢接近。
如何抉择
查准率、召回率
例如对癌症的预测,相对于样本数据真实得癌症的人非常少,大概只有0.5%的概率,这样的问题称为偏斜类,一个类中的样本数比另一个类多得多。
对于偏斜类的问题,如何评估模型的精准度呢?可能一个只输出y=1的函数都比你的模型准确。
这里引入了查准率和召回率,对于稀有的样本有:
通常如果阈值设置的比较高,那么对应的查准率高、召回率低;相反如果阈值设置的低,那么查准率低、召回率高。
F1 score
如何比较权衡不同的算法呢?
神经网络
大多数的机器学习所涉及到的特征非常多,对于非线性分类问题,往往需要构造多项式来表示数据之间的关系,多项式的组成方式千变万化,这对计算带来一定困扰。
大脑中的神经元结构:
机器学习中的神经网络一般包括三部分,输入层,隐藏层,输出层
数据从输入层开始,通过激活函数前向传播到第一隐藏层,经过多个隐藏层,最后到达输出层,神经网络表示复杂的逻辑关系,主要是对隐藏层的构造。
逻辑运算
如上为一个XNOR的分类问题,xnor=(x_1 & x_2) or (\bar{x_1} & \bar{x_2}),我们可以搭建出每种逻辑运算的神经网络,最终整合得到XNOR的神经网络模型。
AND运算
OR运算
NOT运算
XNOR运算
xnor=(x_1 & x_2) or (\bar{x_1} & \bar{x_2})