目录
1、k近邻算法 KNN
k邻近算法,或者说k最邻近(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓k最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻近值来代表。近邻算法就是将数据集合中每一个记录进行分类的方法 。
1.1、核心思想
kNN算法的核心思想是,如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
1.2、算法流程
总体来说,KNN分类算法包括以下4个步骤:
①准备数据,对数据进行预处理。
②计算测试样本点(也就是待分类点)到其他每个样本点的距离。
③对每个距离进行排序,然后选择出距离最小的K个点。
④对K个点所属的类别进行比较,根据少数服从多数的原则,将测试样本点归入在K个点中占比最高的那一类。
1.3、距离定义
- 欧拉距离
∑ i = 1 n ( X i ( a ) − X i ( b ) ) 2 \sqrt{\sum\limits_{i=1}\limits^n(X_i^{(a)}-X_i^{(b)})^2} i=1∑n(Xi(a)−Xi(b))2 - 曼哈顿距离
∑ i = 1 n ∣ X i ( a ) − X i ( b ) ∣ \sum\limits_{i=1}\limits^n|X_i^{(a)}-X_i^{(b)}| i=1∑n∣Xi(a)−Xi(b)∣ - 明科夫斯基距离
( ∑ i = 1 n ∣ X i ( a ) − X i ( b ) ∣ p ) 1 p (\sum\limits_{i=1}\limits^n|X_i^{(a)}-X_i^{(b)}|^p)^\frac{1}{p} (i=1∑n∣Xi(a)−Xi(b)∣p)p1 - 向量空间余弦相似度 Cosine Similarity
- 调整余弦相似度 Adjusted Cosine Similarity
- 皮尔森相关系数 Pearson Correlation Coefficient
- Jaccard 相似系数 Jaccard Coefficient
1.3、优缺点
优点
KNN方法思路简单,易于理解,易于实现,无需估计参数
缺点
该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。
该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。
1.4、参数和模型参数
- 超参数
在算法运行前需要决定的参数 - 模型参数
算法过程中学习的参数
kNN算法没有模型参数,是一个非参数学习算法,kNN算法中k是典型的参数
2、线性回归法 Linear Regression
2.1、简单线性回归
寻找一条直线,最大程度的“拟合”样本特征的样本输出标记之间的关系
样本特性只有一个,称为:简单线性回归。
假设我们找到了最佳拟合的直线方程: y = a x + b y=ax+b y=ax+b,则对于每一个样本点 x ( i ) x^{(i)} x(i),根据我们的直线方程,预测值为: y ^ ( i ) = a x ( i ) + b \hat{y}^{(i)}=ax^{(i)}+b y^(i)=ax(i)+b,真值为: y ( i ) y^{(i)} y(i)。我们希望 y ( i ) y^{(i)} y(i) 和 y ^ ( i ) \hat{y}^{(i)} y^(i)的差距尽量小,表示 y ( i ) y^{(i)} y(i) 和 y ^ ( i ) \hat{y}^{(i)} y^(i)的差距: y ( i ) − y ^ ( i ) y^{(i)}-\hat{y}^{(i)} y(i)−y^(i),但是这样表示差距有正有负,将所有样本差距相加求和为0,这样表示差距为0显然是很不合理的。要去掉负号我们很容易想到用 ∣ y ( i ) − y ^ ( i ) ∣ |y^{(i)}-\hat{y}^{(i)}| ∣y(i)−y^(i)∣表示,但这样表示有一个问题是x并不是处处可导的。为了处处可导又能把负号去掉,差距便可以用方差: ( y ( i ) − y ^ ( i ) ) 2 , (y^{(i)}-\hat{y}^{(i)})^2, (y(i)−y^(i))2,考虑所有样本: ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \sum\limits_{i=1}\limits^m(y^{(i)}-\hat{y}^{(i)})^2 i=1∑m(y(i)−y^(i))2。我们目标是使 ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \sum\limits_{i=1}\limits^m(y^{(i)}-\hat{y}^{(i)})^2 i=1∑m(y(i)−y^(i))2尽可能小,其中 y ^ ( i ) = a x ( i ) + b \hat{y}^{(i)}=ax^{(i)}+b y^(i)=ax(i)+b,则找到a和b,使得 ∑ i = 1 m ( y ( i ) − a x ( i ) − b ) 2 \sum\limits_{i=1}\limits^m(y^{(i)}-a{x}^{(i)}-b)^2 i=1∑m(y(i)−ax(i)−b)2尽可能的小。
2.1.1、一类机器学习算法的基本思路
目标是找到a和b,使得
∑
i
=
1
m
(
y
(
i
)
−
a
x
(
i
)
−
b
)
2
\sum\limits_{i=1}\limits^m(y^{(i)}-ax^{(i)}-b)^2
i=1∑m(y(i)−ax(i)−b)2尽可能小。通过分析问题,确实问题的损失函数或者效用函数。
∑
i
=
1
m
(
y
(
i
)
−
a
x
(
i
)
−
b
)
2
\sum\limits_{i=1}\limits^m(y^{(i)}-ax^{(i)}-b)^2
i=1∑m(y(i)−ax(i)−b)2称为损失函数(loss function)或者效用函数(utility function)通过优化损失函数或者效用函数,获取机器学习的模型。近乎所有参数学习算法都是这样的套路(线性回归、多项式回归、逻辑回归、SVM、神经网络·····)
对于简单线性回归而言,找到a和b,使得
∑
i
=
1
m
(
y
(
i
)
−
a
x
(
i
)
−
b
)
2
\sum\limits_{i=1}\limits^m(y^{(i)}-ax^{(i)}-b)^2
i=1∑m(y(i)−ax(i)−b)2尽可能小是一个典型的最小乘法问题:最小化误差的方差。
a
=
∑
i
=
1
m
(
x
(
i
)
−
x
ˉ
)
(
y
(
i
)
−
y
ˉ
)
∑
i
=
1
m
(
x
(
i
)
−
x
ˉ
)
2
a=\frac{\sum\limits_{i=1}\limits^m(x^{(i)}-\bar{x})(y^{(i)}-\bar{y})}{\sum\limits_{i=1}\limits^m(x^{(i)}-\bar{x})^2}
a=i=1∑m(x(i)−xˉ)2i=1∑m(x(i)−xˉ)(y(i)−yˉ)
b
=
y
ˉ
−
a
x
ˉ
b = \bar{y}-a\bar{x}
b=yˉ−axˉ
向量化运算
∑ i = 1 m ( x ( i ) − x ˉ ) ( y ( i ) − y ˉ ) = ∑ i = 1 m w ( i ) ⋅ v ( i ) = w ⋅ v \sum\limits_{i=1}\limits^m(x^{(i)}-\bar{x})(y^{(i)}-\bar{y})=\sum\limits_{i=1}\limits^mw^{(i)} \cdot v ^{(i)}=w \cdot v i=1∑m(x(i)−xˉ)(y(i)−yˉ)=i=1∑mw(i)⋅v(i)=w⋅v
w = ( w ( 1 ) , w ( 2 ) , ⋯ , w ( m ) ) v = ( v ( 1 ) , v ( 2 ) , ⋯ , v ( m ) ) w=(w^{(1)}, w^{(2)},\cdots,w^{(m)})\qquad v=(v^{(1)}, v^{(2)},\cdots,v^{(m)}) w=(w(1),w(2),⋯,w(m))v=(v(1),v(2),⋯,v(m))
2.1.2、回归算法的衡量
- 均方误差 MSE (Mean Squqraed Error)
1 m ∑ i = 1 m ( y t e s t ( i ) ) − y ^ t e s t ( i ) ) 2 \frac{1}{m}\sum\limits_{i=1}\limits^m(y_{test}^{(i)})-\hat{y}_{test}^{(i)})^2 m1i=1∑m(ytest(i))−y^test(i))2
- 均方根误差 RMSE (Root MeanSquare的Error)
1 m ∑ i = 1 m ( y t e s t ( i ) ) − y ^ t e s t ( i ) ) 2 = M S E t e s t \sqrt{\frac{1}{m}\sum\limits_{i=1}\limits^m(y_{test}^{(i)})-\hat{y}_{test}^{(i)})^2} = \sqrt{MSE_{test}} m1i=1∑m(ytest(i))−y^test(i))2=MSEtest
- 平均绝对误差 MAE (Mean Absolute Error)
1 m ∑ i = 1 m ∣ y t e s t ( i ) − y ˉ t e s t ( i ) ∣ \frac{1}{m}\sum\limits_{i=1}\limits^m|y_{test}^{(i)}-\bar{y}_{test}^{(i)}| m1i=1∑m∣ytest(i)−yˉtest(i)∣
- R Squareed
R 2 = 1 − S S r e s i d u a l S S t o t a l R^2=1-\frac{SS_{residual}}{SS_{total}} R2=1−SStotalSSresidual
R 2 = 1 − ∑ i ( y ( i ) − y ^ ( i ) ) 2 ∑ i ( y ˉ − y ( i ) ) 2 = 1 − ( ∑ i m ( y ( i ) − y ^ ( i ) ) 2 ) / m ( ∑ i m ( y ˉ − y ( i ) ) 2 ) / m = 1 − M S E ( y ^ , y ) V a r ( y ) ( 方 差 ) R^2=1-\frac{\sum\limits_i(y^{(i)}-\hat{y}^{(i)})^2}{\sum\limits_i(\bar{y}-y^{(i)})^2}=1-\frac{(\sum\limits_i\limits^m(y^{(i)}-\hat{y}^{(i)})^2)/m}{(\sum\limits_i\limits^m(\bar{y}-y^{(i)})^2)/m}=1-\frac{MSE(\hat{y},y)}{Var(y)_{(方差)}} R2=1−i∑(yˉ−y(i))2i∑(y(i)−y^(i))2=1−(i∑m(yˉ−y(i))2)/m(i∑m(y(i)−y^(i))2)/m=1−Var(y)(方差)MSE(y^,y)
∑ i ( y ( i ) − y ^ ( i ) ) 2 \sum\limits_i(y^{(i)}-\hat{y}^{(i)})^2 i∑(y(i)−y^(i))2 是使用我们的模型预测产生的错误
∑ i ( y ( i ) − y ^ ( i ) ) 2 \sum\limits_i(y^{(i)}-\hat{y}^{(i)})^2 i∑(y(i)−y^(i))2 是使用 y = y ˉ y=\bar{y} y=yˉ (Baseline Model)预测产生的错误
- R 2 < = 1 R^2<=1 R2<=1
- R 2 R^2 R2 越大越好。当我们的预测模型不犯任何错误是, R 2 R^2 R2得到最大值1
- 当我们的模型等于基准模型时, R 2 R^2 R2为0
- 如果 R 2 < 0 R^2<0 R2<0,说明我们学习到的模型还不如基准模型。此时。很有可能我们的数据不存在任何线性关系。
2.2、多元线性回归
样本特征有多个
目标:
∑
i
=
1
m
(
y
(
i
)
−
y
^
(
i
)
)
2
\sum\limits_{i=1}\limits^m(y^{(i)}-\hat{y}^{(i)})^2
i=1∑m(y(i)−y^(i))2尽可能小,其中
y
^
(
i
)
=
θ
0
+
θ
1
X
1
(
i
)
+
θ
2
X
2
(
i
)
⋯
+
θ
n
X
n
(
n
)
\hat{y}^{(i)}=\theta_0+\theta_1X_1^{(i)}+\theta_2X_2^{(i)}\cdots+\theta_nX_n^{(n)}
y^(i)=θ0+θ1X1(i)+θ2X2(i)⋯+θnXn(n),则找到
θ
0
,
θ
1
,
θ
2
,
⋯
,
θ
n
\theta_0,\theta_1,\theta_2,\cdots,\theta_n
θ0,θ1,θ2,⋯,θn,使得
∑
i
=
1
m
(
y
(
i
)
−
y
^
(
i
)
)
2
\sum\limits_{i=1}\limits^m(y^{(i)}-\hat{y}^{(i)})^2
i=1∑m(y(i)−y^(i))2尽可能小。将其向量化转换:
y ^ ( i ) = θ 0 X 0 ( i ) + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) ⋯ + θ n X n ( n ) , X 0 ( i ) ≡ 1 \hat{y}^{(i)}=\theta_0X_0^{(i)}+\theta_1X_1^{(i)}+\theta_2X_2^{(i)}\cdots+\theta_nX_n^{(n)}\quad,X_0^{(i)}\equiv1 y^(i)=θ0X0(i)+θ1X1(i)+θ2X2(i)⋯+θnXn(n),X0(i)≡1
θ = ( θ 0 , θ 1 , θ 2 , ⋯ , θ n ) T \theta = (\theta_0,\theta_1,\theta_2,\cdots,\theta_n)^T θ=(θ0,θ1,θ2,⋯,θn)T
X ( i ) = ( X 0 ( i ) , X 1 ( i ) , X 2 ( i ) , ⋯ , X n ( i ) ) X^{(i)} = (X_0^{(i)},X_1^{(i)},X_2^{(i)},\cdots,X_n^{(i)}) X(i)=(X0(i),X1(i),X2(i),⋯,Xn(i))
y ^ ( i ) = X ( i ) ⋅ θ \hat y^{(i)}=X^{(i)}\cdot\theta y^(i)=X(i)⋅θ
X b = [ 1 X 1 ( 1 ) X 2 ( 1 ) ⋯ X n ( 1 ) 1 X 1 ( 2 ) X 2 ( 2 ) ⋯ X n ( 2 ) ⋯ ⋯ 1 X 1 ( m ) X 2 ( m ) ⋯ X n ( m ) ] θ = [ θ 0 θ 1 θ 2 ⋯ θ n ] X_b=\left[\begin{matrix} 1 & X_1^{(1)} & X_2^{(1)} &\cdots & X_n^{(1)} \\ 1 & X_1^{(2)} & X_2^{(2)} &\cdots & X_n^{(2)} \\ \cdots & & & & \cdots\\ 1 & X_1^{(m)} & X_2^{(m)} &\cdots & X_n^{(m)} \end{matrix}\right] \qquad \theta=\left[\begin{matrix} \theta_0\\ \theta_1\\ \theta_2\\ \cdots\\ \theta_n \end{matrix}\right] Xb=⎣⎢⎢⎢⎡11⋯1X1(1)X1(2)X1(m)X2(1)X2(2)X2(m)⋯⋯⋯Xn(1)Xn(2)⋯Xn(m)⎦⎥⎥⎥⎤θ=⎣⎢⎢⎢⎢⎡θ0θ1θ2⋯θn⎦⎥⎥⎥⎥⎤
y ^ = X b ⋅ θ \hat y=X_b\cdot\theta y^=Xb⋅θ
使
∑
i
=
1
m
(
y
(
i
)
−
y
^
(
i
)
)
2
\sum\limits_{i=1}\limits^m(y^{(i)}-\hat{y}^{(i)})^2
i=1∑m(y(i)−y^(i))2尽可能小,则
(
y
^
−
X
b
⋅
θ
)
T
(
y
^
−
X
b
⋅
θ
)
(\hat y-X_b\cdot\theta)^T(\hat y-X_b\cdot\theta)
(y^−Xb⋅θ)T(y^−Xb⋅θ),则可以求多元线性回归的正规方程解(Normal Equation)
θ
=
(
X
b
T
X
b
)
−
1
X
b
T
y
\theta=(X^T_bX_b)^{-1}X^T_by
θ=(XbTXb)−1XbTy
这种方法的问题:时间复杂度高:
O
(
n
3
)
O(n^3)
O(n3)(优化O(
n
2.4
n^{2.4}
n2.4))
优点:不需要对数据归一化处理
2.3、多项式回归
研究一个因变量与一个或多个自变量间多项式的回归分析方法,称为多项式回归(Polynomial Regression)。如果自变量只有一个时,称为一元多项式回归;如果自变量有多个时,称为多元多项式回归。在一元回归分析中,如果因变量y与自变量x的关系为非线性的,但是又找不到适当的函数曲线来拟合,则可以采用一元多项式回归。
一元m次多项式回归方程为:
y
^
=
b
0
+
b
1
x
+
b
2
x
2
+
⋯
+
b
m
x
m
\hat y=b_0+b_1x+b_2x^2+\cdots+b_mx^m
y^=b0+b1x+b2x2+⋯+bmxm。
二元二次多项式回归方程为:
y
^
=
b
0
+
b
1
x
1
+
b
2
x
2
+
b
3
x
1
2
+
b
4
x
2
2
+
b
5
x
1
x
2
\hat y=b_0+b_1x_1+b_2x_2+b_3x_1^2+b_4x_2^2+b_5x_1x_2
y^=b0+b1x1+b2x2+b3x12+b4x22+b5x1x2。
多项式回归的最大优点就是可以通过增加x的高次项对实测点进行逼近,直至满意为止。事实上,多项式回归可以处理相当一类非线性问题,它在回归分析中占有重要的地位,因为任一函数都可以分段用多项式来逼近。因此,在通常的实际问题中,不论依变量与其他自变量的关系如何,我们总可以用多项式回归来进行分析。