属性特征的分类、常见的统计描述
中心趋势度量
- 均值(mean)
- 加权算术均值(Weighted mean)
- 中位数(median):正中间的值,偶数取中间两个数的平均
- 众数(mode)
- 中列数(midrange):数据集中的最大值和最小值的均值
数据分散度量
- 极差(range)一组观测值的最大值和最小值的差距
- 分位数(quantile):取自数据分布的每隔一定间隔上的点
- 四分位数(Quantile):把数据划分为四个相等的部分,使得每部分表示数据分布的四分之一。这3个数据点称为四分位数。
- 四分位数极差(IQR):Q_1和Q_3之间的距离
- 方差和标准差(var & std): 每个数据分别与平均数之差的平方和的平均数。标准差:方差的平方根
数据分布形状
数据的图形显示
- 散点图:探究两个数值型变量之间是否存在某种关系
- 箱型图:体现数据分布的图形
- min,Q_1,median,Q_3,max
- 离群点:第三个四分位数之上或者第一个四分位数之下至少1.5XIQR的值
- 折线图:反映数据背后趋势
- 热力图:展现两个离散变量之间的组合关系
数据预处理
数据清洗
删除无关数据、重复数据
缺失值处理:
- 替换法(fillna函数)
- 异常值处理
数据变换
规范化
- Min-Max规范化 v ′ = v − m i n A m a x A − m i n A v'=\frac{v-min_A}{max_A-min_A} v′=maxA−minAv−minA
- Z-Score规范化 规范化数据 = 原数据 − 均值 标准差 规范化数据=\frac{原数据-均值}{标准差} 规范化数据=标准差原数据−均值
- 小数定标标准化:通过移动属性的小数位,将数据映射到[-1,1]区间内
- 正则化(Normalize)/归一化、范数化
- 稳健标准化(考虑异常分布的规范化方法)将中位数和百分位数(默认使用四分位间距)分别代替均值和标准差用于数据的规范化
离散化
- 二值离散化
- 等宽离散化(区间宽度相同)
- 等宽分箱法
- 等频离散化(样本数量相同)
- 在等宽的基础上实现
数据编码
-
数字编码
-
One-Hot编码:
二进制编码记过结果 -
哑变量编码
有监督学习和无监督学习
- 有监督学习指的是,通过已有的训练样本(即特征以及因变量)去训练得到一个模型,再利用这个模型将输入(特征)映射为相应的输出。有监督学习的结果可以分为两类:分类与回归。
- 无监督学习,只给计算机训练数据,不给结果(标签),因此计算机无法准确的知道那些数据具有那些标签,只能凭借强大的计算能力分析数据的特征,从而得到一定的成果,通常是得到一些集合,集合内的数据在某些特征上相同或着相似。无监督学习的典型例子是聚类
回归模型
一元线性回归
Pearson相关系数:
ρ
=
∑
(
X
i
−
X
ˉ
)
(
Y
i
−
Y
ˉ
)
∑
(
X
i
−
X
ˉ
)
2
∑
(
Y
i
−
Y
ˉ
)
2
ρ=\frac{\sum (X_i-\bar X)(Y_i-\bar Y)}{\sqrt{\sum(X_i-\bar X)^2\sum(Y_i-\bar Y)^2}}
ρ=∑(Xi−Xˉ)2∑(Yi−Yˉ)2∑(Xi−Xˉ)(Yi−Yˉ)
∣ ρ ∣ > = 0.8 \midρ\mid>=0.8 ∣ρ∣>=0.8 | 0.5 < = ∣ ρ ∣ < 0.8 0.5<=\midρ\mid<0.8 0.5<=∣ρ∣<0.8 | 0.3 < = ∣ ρ ∣ < 0.5 0.3<=\midρ\mid<0.5 0.3<=∣ρ∣<0.5 | ∣ ρ ∣ < 0.3 \midρ\mid<0.3 ∣ρ∣<0.3 |
---|---|---|---|
高度相关 | 中度相关 | 弱相关 | 几乎不相关 |
一类算法的基本思路:
找到a、b,使得损失函数:
∑
i
=
1
n
(
y
(
i
)
−
a
−
b
x
(
i
)
)
2
\sum_{i=1}^{n}(y^{(i)}-a-bx^{(i)})^2
∑i=1n(y(i)−a−bx(i))2尽可能小
多元线性回归
目标:找到
θ
0
,
θ
1
,
θ
2
,
.
.
.
,
θ
k
\theta_0,\theta_1,\theta_2,...,\theta_k
θ0,θ1,θ2,...,θk,使
∑
i
=
1
m
(
y
(
i
)
−
y
ˉ
(
i
)
)
2
\sum_{i=1}^{m}(y^{(i)}-\bar y^{(i)})^2
∑i=1m(y(i)−yˉ(i))2尽可能小
y
ˉ
(
i
)
=
θ
0
+
θ
1
X
1
(
i
)
+
θ
2
X
2
(
i
)
+
.
.
.
+
θ
k
X
k
(
i
)
\bar y^{(i)}=\theta_0+\theta_1X_1^{(i)}+\theta_2X_2^{(i)}+...+\theta_kX_k^{(i)}
yˉ(i)=θ0+θ1X1(i)+θ2X2(i)+...+θkXk(i)
线性回归
优点
- 对数据的可解释
- 建模迅速,对于小数据量、简单的关系很有效
- 线性回归模型十分容易理解,有利于决策分析
缺点
- 对异常点十分敏感
- 难以很好的表达高度复杂的数据
- 只能解决回归问题
- 对数据有假设:线性
多项式回归
关联规则
作用:
一个包含k个项的项集可能产生2k-1个频繁项集
Apriori算法(★★★★★)
先验原理
先验性:如果一个项集是频繁的,那么它的所有 非空子集也是频繁的
反单调性:如果一个项集是频繁的,则它的所有超集也一定是 非频繁的
频繁k项集一定是由频繁k-1项集组合生成的
算法实现
第一阶段:寻找频繁项集
1.把每个项作为1-项集,作为候选集C1,计算支持度;过滤候选集,得到频繁1-项集L1
2.连接:通过Lk-1x Lk-1算法自身连接产生候选集C2
3.剪枝:按照先验原理对C2进行剪枝,计算支持度并过滤,得到所有频繁2-项集L2
4.重复步骤2,直至无法生成新的候选集结束
第二阶段:由频繁项集产生关联规则
1.对于L中的每一个频繁项集 l,生成 l 所有的非空真子集
2.对于 l 中的每一个非空真子集X,如果
support_count(l)/support_count(X)>=minconf
则输出强关联规则 X->(l-X),其中min_conf是最小置信度阈值
关联规则的性质
关联模式评估
置信度
提升度
L
i
f
t
(
A
,
B
)
=
(
P
(
A
∪
B
)
/
P
(
A
)
)
P
(
B
)
=
P
(
A
∪
B
)
P
(
A
)
P
(
B
)
Lift(A,B) = \frac {(P(A\cup B)/P(A))}{P(B)} = \frac {P(A\cup B)}{P(A)P(B)}
Lift(A,B)=P(B)(P(A∪B)/P(A))=P(A)P(B)P(A∪B)
A发生的条件下,B发生的概率 比上B发生的概率
若提升值等于1 ,则说明A和B互相独立
>1,则A和B正相关
<1,则A和B负相关
杠杆度
l
e
v
e
r
a
g
e
(
A
,
B
)
=
P
(
A
∪
B
)
−
P
(
A
)
P
(
B
)
leverage(A,B)=P(A\cup B)-P(A)P(B)
leverage(A,B)=P(A∪B)−P(A)P(B)
=0 ,则说明A和B互相独立
>0,则A和B正相关
<0,则A和B负相关
皮尔森相关系数
ρ
(
A
,
B
)
=
P
(
A
∪
B
)
P
(
A
ˉ
∪
B
ˉ
)
−
P
(
!
A
∪
B
ˉ
)
P
(
A
∪
B
ˉ
)
P
(
A
)
P
(
A
ˉ
)
P
(
B
)
P
(
B
ˉ
)
\rho(A,B) = \frac{P(A\cup B)P(\bar{A}\cup \bar{B})-P(!A\cup \bar{B})P(A\cup \bar{B})}{ \sqrt{P(A)P(\bar{A})P(B)P(\bar{B})}}
ρ(A,B)=P(A)P(Aˉ)P(B)P(Bˉ)P(A∪B)P(Aˉ∪Bˉ)−P(!A∪Bˉ)P(A∪Bˉ)
ρ
(
A
,
B
)
ρ(A,B)
ρ(A,B)取值区间为
[
−
1
,
1
]
[-1,1]
[−1,1]
确信度
C
o
n
v
i
c
t
i
o
n
(
A
,
B
)
=
P
(
A
)
P
(
!
B
)
P
(
A
∪
B
ˉ
)
Conviction(A,B)= \frac {P(A)P(!B)}{\sqrt{P(A\cup \bar{B})}}
Conviction(A,B)=P(A∪Bˉ)P(A)P(!B)
值越大,相关性越强
分类
K近邻模型(K-NN模型)
原理
选择某点,选择距离其最近的K个点中,占比最高的一类作为该点归类
所有方法数值化
防止数值化的量纲影响:标准化
K过小,过拟合
K过大,当不同类别数量不均衡时,结果偏向占优数量
最优k的寻找方法
- 可视化观察K的取值与准确率的变化 绘制折线图
- 交叉验证Cross Validation
- K-folds交叉验证
把训练数据集划分成k份
每次训练k个模型 - 留一验证( LOOCV, Leave-One-Out Cross Validation)
训练数据集有m个样本,就把训练数据集分成m份
- K-folds交叉验证
考虑距离的权重
特点
优点:算法简单,容易理解
可用于分类和回归任务
不对数据做任何假设,这意味着它可以用于解决各种各样的问题
缺点:对于高维特征的数据集,效果往往不好
对于大多数特征的大多数取值都为0的数据集(稀疏数据集)K-NN效果尤其不好
需要存放训练记录,数据量大时,需占用较大内存,计算成本高,数据集大时可能导致预测需要很长时间
逻辑回归
原理
S
i
g
m
o
i
d
Sigmoid
Sigmoid函数
h
(
t
)
=
1
1
+
e
−
t
h
(
t
)
∈
(
0
,
1
)
h(t)=\frac{1}{1+e^{-t}} \qquad h(t) \in (0,1)
h(t)=1+e−t1h(t)∈(0,1)
当
t
>
0
t>0
t>0时,
p
>
0.5
p>0.5
p>0.5
当
t
<
0
t<0
t<0时,
p
<
0.5
p<0.5
p<0.5
逻辑回归模型:
h
(
x
)
=
1
1
+
e
−
(
θ
0
+
θ
1
x
1
+
.
.
.
+
θ
n
x
n
)
h
(
t
)
∈
(
0
,
1
)
h(x)=\frac{1}{1+e^{-(\theta_0+\theta_1x_1+...+\theta_nx_n)}} \qquad h(t) \in (0,1)
h(x)=1+e−(θ0+θ1x1+...+θnxn)1h(t)∈(0,1)
y
^
=
{
1
,
h
(
x
)
≥
0.5
0
,
h
(
x
)
<
0.5
\hat{y}=\begin{cases} 1, & \text {$h(x)\geq 0.5$} \\ 0, & \text{$h(x)<0.5$} \end{cases}
y^={1,0,h(x)≥0.5h(x)<0.5
特点
二分类
朴素贝叶斯 (★★★★★)
贝叶斯定理
特征条件独立性假设
条件概率
事件A发生的前提下,事件B发生的概率
P
(
B
∣
A
)
P(B|A)
P(B∣A)
联合概率:
P
(
B
∣
A
)
=
P
(
A
∩
B
)
P
(
B
)
⇒
P
(
A
∩
B
)
=
P
(
A
∣
B
)
×
P
(
A
)
\text{联合概率:}P(B|A)=\frac {P(A\cap B)}{P(B)}\Rightarrow P(A\cap B)=P(A|B)\times P(A)
联合概率:P(B∣A)=P(B)P(A∩B)⇒P(A∩B)=P(A∣B)×P(A)
贝叶斯定理:
后验概率:
P
(
A
∣
B
)
=
P
(
A
)
×
P
(
B
∣
A
)
P
(
B
)
P(A|B)=P(A)\times \frac{P(B|A)}{P(B)}
P(A∣B)=P(A)×P(B)P(B∣A)
先验概率:
P
(
A
)
P(A)
P(A)
可能性函数(调整因子):
P
(
B
∣
A
)
P
(
B
)
\frac{P(B|A)}{P(B)}
P(B)P(B∣A)
后验概率
=
先验概率
×
调整因子
后验概率=先验概率\times 调整因子
后验概率=先验概率×调整因子
全概率公式(常量):
P
(
A
)
=
∑
i
=
1
n
P
(
A
B
i
)
=
∑
i
=
1
n
P
(
B
i
)
P
(
A
∣
B
i
)
P(A)=\sum_{i=1}^{n}{P(AB_i)}=\sum_{i=1}^{n}{P(B_i)P(A|B_i)}
P(A)=i=1∑nP(ABi)=i=1∑nP(Bi)P(A∣Bi)
贝叶斯分类的数学模型:
设
X
是一个类标号未知的数据样本,在已知
X
的情况下,计算样本
X
属于某个类别
C
i
的概率
设X是一个类标号未知的数据样本,在已知X的情况下,计算样本X属于某个类别C_i的概率
设X是一个类标号未知的数据样本,在已知X的情况下,计算样本X属于某个类别Ci的概率
P
(
C
i
∣
X
)
=
P
(
C
i
X
)
P
(
X
)
=
P
(
C
i
)
P
(
X
∣
C
i
)
∑
i
=
1
k
P
(
C
i
)
P
(
X
∣
C
i
)
P(C_i|X)=\frac{P(C_iX)}{P(X)}=\frac{P(C_i)P(X|C_i)}{\sum_{i=1}^{k}{P(C_i)P(X|C_i)}}
P(Ci∣X)=P(X)P(CiX)=∑i=1kP(Ci)P(X∣Ci)P(Ci)P(X∣Ci)
最大概率值
P
(
C
i
∣
X
)
P(C_i|X)
P(Ci∣X)对应的类别作为样本的最终分类
P
(
C
i
)
P(C_i)
P(Ci)通常为已知,主要任务为计算并比较
P
(
X
∣
C
i
)
P(X|C_i)
P(X∣Ci)的值
X
=
(
x
1
,
x
2
,
x
3
,
.
.
.
,
X
p
)
,
P
(
X
∣
C
i
)
=
P
(
x
1
,
x
2
,
x
3
,
.
.
.
,
X
p
∣
C
i
)
X=(x_1,x_2,x_3,...,X_p),\qquad P(X|C_i)=P(x_1,x_2,x_3,...,X_p|C_i)
X=(x1,x2,x3,...,Xp),P(X∣Ci)=P(x1,x2,x3,...,Xp∣Ci)
朴素贝叶斯中,假设自变量之间互相独立,则
P
(
X
∣
C
i
)
=
P
(
x
1
,
x
2
,
.
.
.
,
X
p
∣
C
i
)
=
P
(
x
1
∣
C
i
)
P
(
x
2
∣
C
i
)
.
.
.
P
(
x
p
∣
C
i
)
P(X|C_i)=P(x_1,x_2,...,X_p|C_i)=P(x_1|C_i)P(x_2|C_i)...P(x_p|C_i)
P(X∣Ci)=P(x1,x2,...,Xp∣Ci)=P(x1∣Ci)P(x2∣Ci)...P(xp∣Ci)
最终简化成:
P
(
C
i
∣
X
)
=
a
r
g
m
a
x
c
i
P
(
C
i
)
∏
j
P
(
x
j
∣
C
j
)
P(C_i|X)=arg max_{c_i}P(C_i)\prod_{j}P(x_j|C_j)
P(Ci∣X)=argmaxciP(Ci)j∏P(xj∣Cj)
几种贝叶斯模型
- 多项式贝叶斯分类器MultionmialNB
- 离散
- 伯努利贝叶斯分类器BernoulliNB
- 离散
- 二值化自变量
- 高斯贝叶斯分类器GaussianNB
- 连续
平滑系数
α
\alpha
α:
P
(
x
j
=
x
j
k
∣
C
i
)
=
N
i
k
+
α
N
i
+
n
α
P(x_j=x_{jk}|C_i)=\frac {N_{ik}+\alpha }{N_i+n\alpha}
P(xj=xjk∣Ci)=Ni+nαNik+α
用于防止概率取值0的可能,一般取值为1,n为因变量的类别个数
决策树
如何选择根节点和中间节点的属性:
通过该属性进行测试后,得到的分类结果最“纯净”。
衡量纯净度
信息熵:
I
n
f
o
r
(
p
1
,
p
2
,
.
.
.
,
p
k
)
=
−
∑
k
=
1
k
p
k
l
o
g
2
p
k
Infor(p_1,p_2,...,p_k)=-\sum_{k=1}^{k}p_klog_2 p_k
Infor(p1,p2,...,pk)=−k=1∑kpklog2pk
l
o
g
2
n
≈
l
g
n
×
3.322
log_2n\approx lgn\times3.322
log2n≈lgn×3.322
对于某个事件而言,它有k个可能值,
p
k
p_k
pk表示第k个可能值的发生概率。
信息熵反映的是某个事件所有可能值的熵和。
备注:
l
o
g
2
n
≈
l
g
n
×
3.322
log_2n\approx lgn\times3.322
log2n≈lgn×3.322
条件熵
I
n
f
o
r
(
D
∣
A
)
=
−
∑
i
=
1
n
P
(
A
i
)
∑
k
=
1
k
P
(
D
k
∣
A
i
)
l
o
g
2
P
(
D
k
∣
A
i
)
Infor(D|A)=-\sum_{i=1}^{n}P(A_i)\sum _{k=1}^{k}P(D_k|A_i)log_2P(D_k|A_i)
Infor(D∣A)=−i=1∑nP(Ai)k=1∑kP(Dk∣Ai)log2P(Dk∣Ai)
值越小表示纯度越高
信息增益Gain
g
(
D
∣
A
)
=
I
n
f
o
r
(
D
)
−
I
n
f
o
r
(
D
∣
A
)
g(D|A)=Infor(D)-Infor(D|A)
g(D∣A)=Infor(D)−Infor(D∣A)
选择信息增益较大的属性作为节点
信息增益率
g
r
(
D
∣
A
)
=
g
(
D
∣
A
)
H
A
g_r(D|A)=\frac{g(D|A)}{H_A}
gr(D∣A)=HAg(D∣A)
H
A
H_A
HA:数据集D关于这个特征的信息熵
基尼系数
信息熵VS基尼系数
- 熵信息的计算比基尼系统稍慢
- 大多数时候二者没有特别的效果优劣
算法 | 支持模型 | 树结构 | 特征选择 |
---|---|---|---|
ID3 | 分类 | 多叉树 | 信息增益 |
C4.5 | 分类 | 多叉树 | 信息增益率 |
CART | 分类,回归 | 二叉树 | 基尼系数,均方差 |
主要的决策树算法
算法 | 特征类型 | 不纯度度量 | 分割的子节点数量 | 目标特征类型 |
---|---|---|---|---|
ID3 | 离散型 | 信息熵(信息增益) | K > = 2 K>=2 K>=2 | 离散型 |
C4.5 | 离散型、连续型 | 信息熵(信息增益率) | K > = 2 K>=2 K>=2 | 离散型 |
C5.0 | 离散型、连续型 | 信息熵(信息增益率) | K > = 2 K>=2 K>=2 | 离散型 |
CART | 离散型、连续型 | Gini指数 | K = 2 K=2 K=2 | 离散型、连续型 |
ID3算法★★★★★
- 输入数据,主要包括训练集的特征和类标号
- 如果所有实例都属于一个类别,则决策树是一个单节点树,否则执行 3
- 计算训练数据中每个特征的信息增益
- 从根节点开始选择最大信息增益的特征进行分裂。依次类推,从上向下构建决策树,每次选择有最大信息增益的特征进行分裂,选过的特征后面就不能继续进行选择使用了。
- 不断的构建决策树,至没有特征可以选择或者分裂后的所有元组属于同一类别时候停止构建
- 决策树构建完成,进行预测。
特点:
- 倾向于选择数值较多的特征
- 对于每个属性均为离散值属性,如果是连续值属性,需先离散化
C4.5算法
- 能够完成连续属性的离散化处理
- 用信息增益率选择属性,克服了使用信息增益选择属性时偏向选取值大的属性的不足
- 在树构造过程中进行剪枝
CART算法
- 采用简化的二叉树模型,采用基尼系数来简化计算
- 二叉树最大的好处是还可以做回归模型
- 缺点:样本发生很小的改变,就会导致二叉树结构的剧烈改变。
决策时的剪枝
- 预剪枝
- 熵或者基尼值小于阈值
- 决策树深度达到指定条件
- 内部节点再划分所需的最小样本数
- 叶子节点的最少样本数
- 后剪枝
- 误差降低剪枝法
- 悲观剪枝法
决策树算法优缺点
优:
- 模型容易理解
- 算法完全不受数据缩放的影响。每个特征被单独处理,而且数据的划分不依赖于缩放,因此决策树不需要特征预处理(例如归一化、标准化)。当特征的尺度不同、或者离散特征和连续特征同时存在时,决策树的效果很好
缺:
- 即使做了预剪枝,也经常会过拟合。如果预剪枝的效果不理想,还可以使用随机森林,该算法综合了多棵决策树,可以很好地避免单棵决策树过拟合的可能
随机森林
原理:生成多个分类器,各自独立的学习和做出预测。输出的类别是这些预测的类别的众数而定。
随机森林是包含多个决策树的分类器,属于集成学习。
优:
- 抗过拟合能力:通过平均决策树,降低过拟合的风险性
- 具有良好的预测准确率
- 能够处理高维特征的输入样本,而且不需要降维
- 与决策树相同,不需要对特征进行数据缩放,可以同时处理离散和连续特征
- 通常不需要反复调参就能够得出较好的结果
缺: - 与决策树相比,需要更多的训练时间
- 解释性不强
分类算法的模型评估
准确率(Accuracy)
精确率(Precision)
召回率(Recall)
F1 Score
P-R曲线(Precision-Recall Curve)
ROC
AUC
混淆矩阵(confusion matrix)是一个评估分类问题常用的工具,对于 k 元分类,其实它就是一个k x k的表格,用来记录分类器的预测结果。对于常见的二分类,它的混淆矩阵是 2x2 的。
- TP 真阳性:True Positives, 表示 真实值为正例 且被 分类器判定为正例(预测值) 的样本数
- FP 假阳性:False Positives, 表示 真实值为负例 且被 分类器判定为正例(预测值) 的样本数
- FN 假阴性:False Negatives, 表示 真实值为正例 但被 分类器判定为负例(预测值) 的样本数
- TN 真阴性:True Negatives, 表示真实值为负例 且被 分类器判定为负例(预测值) 的样本数
准确率(Accuracy)
分类正确的样本占总样本个数的比例
A
c
c
u
r
a
c
y
=
T
P
+
T
N
T
P
+
F
P
+
T
N
+
F
N
=
正确预测的样本数
所有样本数
Accuracy=\frac{TP+TN}{TP+FP+TN+FN}=\frac{正确预测的样本数}{所有样本数}
Accuracy=TP+FP+TN+FNTP+TN=所有样本数正确预测的样本数
精确率(Precision)
又称查准率,是针对预测结果而言的评价指标。指在分类正确的正样本个数占分类器判定为正样本个数的比例。
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
=
分类正确的正样本个数
被分类器判定为正样本个数
Precision=\frac{TP}{TP+FP}=\frac{分类正确的正样本个数}{被分类器判定为正样本个数}
Precision=TP+FPTP=被分类器判定为正样本个数分类正确的正样本个数
召回率(Recall)
指分类正确的正样本个数占真正的正样本个数的比例。召回率也是对部分样本的统计量,侧重对真实的正类样本的统计:
R
e
c
a
l
l
=
T
P
T
P
+
F
N
=
分类正确的正样本个数
真正的正样本个数
Recall=\frac{TP}{TP+FN}=\frac{分类正确的正样本个数}{真正的正样本个数}
Recall=TP+FNTP=真正的正样本个数分类正确的正样本个数
F1 Score
F1 Score是精准率和召回率的调和平均值,同时兼顾了分类模型的准确率和召回率,是统计学中用来衡量二分类模型的一种指标。它的值域是
[
0
,
1
]
[0,1]
[0,1],值越大意味着模型越好。
F
1
=
2
×
P
r
e
c
i
s
i
o
n
×
R
e
c
a
l
l
P
r
e
c
i
s
i
o
n
+
R
e
c
a
l
l
F1=2\times \frac{Precision\times Recall}{Precision+Recall}
F1=2×Precision+RecallPrecision×Recall
P-R曲线(Precision-Recall Curve)
。。。
ROC曲线
横坐标为假阳性率(False Positive Rate, FPR)
F
P
R
=
F
P
F
P
+
T
N
FPR=\frac{FP}{FP+TN}
FPR=FP+TNFP
纵坐标为真阳性率(True Positive, TPR)
F
P
R
=
T
P
T
P
+
F
N
FPR=\frac{TP}{TP+FN}
FPR=TP+FNTP
设置不同的阈值,会得到不同的TPR和FPR,随着阈值减小,越来越多的实例被划分为正类
AUC
AUC为ROC曲线下的面积,值域为[0,1],能够直观的评价出分类器的好坏,AUC的值越大,分类器效果越好。
- AUC=1:完美的分类器,采用该模型,不管设定什么阈值都能得出完美预测
- 0.5<AUC<1:优于随即猜测,分类器设定好好的阈值,有预测价值
- AUC=0.5:跟随即猜测一样,模型没有预测价值
- AUC<0.5:比随机猜测还差,但是如果反着预测,则优于随机猜测
聚类算法
K-means算法(基于划分聚类)
K均值聚类算法利用距离远近的思想将n个样本点划分到k个分组中,每个分组都有一个质心,分组中的每个点离它所属的分组的质心距离最短
聚类过程
聚类前必须对数据进行标准化的预处理
- 从数据中随机挑选k个样本点作为初始的簇中心
- 计算剩余样本与簇中心的距离,并把各类样本标记为离k个簇中心最近的类别
- 重新计算各簇中样本点的均值,并以均值作为新的k个簇中心
- 不断重复第二步和第三步,直到簇中心的变化趋于稳定(新的簇中心与原簇中心相等或小于指定阈值)形成最终k个簇
k均值聚类的目标函数:簇内样本的离差平方和之和
J
(
c
1
,
c
2
,
.
.
.
,
c
k
)
=
∑
j
=
1
k
∑
i
n
j
(
x
i
−
c
j
)
2
J(c_1,c_2,...,c_k)=\sum_{j=1}^{k}\sum_{i}^{n_j}(x_i-c_j)^2
J(c1,c2,...,ck)=j=1∑ki∑nj(xi−cj)2
其中,
c
j
表示第
j
个簇的簇中心,
x
i
属于第
j
个簇的样本
i
,
n
j
表示第
j
个簇的样本总量。对于该目标函数而言
c
j
是未知的参数,要想求得目标函数的最小值,得先知道参数
c
j
的值
其中,c_j表示第j个簇的簇中心,x_i属于第j个簇的样本i,n_j表示第j个簇的样本总量。对于该目标函数而言c_j是未知的参数,要想求得目标函数的最小值,得先知道参数c_j的值
其中,cj表示第j个簇的簇中心,xi属于第j个簇的样本i,nj表示第j个簇的样本总量。对于该目标函数而言cj是未知的参数,要想求得目标函数的最小值,得先知道参数cj的值
最佳k值的确定
当k越大,簇内离差平方和之和会越小
合理的k值是:随着簇的增加,簇内离差平方和之和趋于稳定。
拐点法
在不同k值下计算簇内离差平方和之和,通过可视化的方法找到“拐点”所对应的k值。 当折线图中的斜率由大突变小时,并且之后的斜率变化缓慢,则认为突然变化的点就是寻找的目标点。
轮廓系数法
S
(
i
)
=
b
(
i
)
−
a
(
i
)
m
a
x
(
a
(
i
)
,
b
(
i
)
)
S(i)=\frac{b(i)-a(i)}{max(a(i),b(i))}
S(i)=max(a(i),b(i))b(i)−a(i)
a
(
i
)
a(i)
a(i)体现了簇内的密集性,代表样本i与同簇内其他样本点距离的平均值;
b
(
i
)
b(i)
b(i)反映簇间的分散性,样本i与其他非同簇样本点距离的平均值,然后从平均值中挑选出最小值
S
(
i
)
S(i)
S(i)的取值范围:[-1,1]
当
S
(
i
)
S(i)
S(i)接近于-1时,说明样本i的分配不合理,需将其分配到其他簇中;
当
S
(
i
)
S(i)
S(i)近似为0时,说明样本i落在簇的边界处
当
S
(
i
)
S(i)
S(i)近似为1时,说明样本i的分配是合理的
间隔统计量法
。。。
k-均值聚类的优缺点
优:
- 擅长处理球状分布的数据
- 对于处理大数据集,是相对可伸缩的和高效的,它的复杂度是O(nkt),n是对象个数,k是簇的数目,t是迭代次数
- 相比其他聚类算法更简单
缺:
- 初始质心的选择与算法的运行效率密切相关
- 要求用户事先给定簇数k
- 对噪声和离群点敏感,少量的这类数据对结果产生很大影响
- 算法是基于距离的方式判断样本之间的相似度,不适合发现非球形的簇
层次聚类算法(★★★★★)
层次聚类的实质是计算各簇内样本点之间的相似度(通常以欧式距离作为相似度指标),并通过相似度的结果构建一颗聚类树
聚类树的创建方法:自下而上的凝聚;自上而下的分裂
簇间距离的度量方法:
最小距离法:
以所有簇间样本点距离的最小值作为簇间距离
d
i
s
t
m
i
n
(
C
i
,
C
j
)
=
m
i
n
(
∣
p
−
q
∣
)
(
p
∈
C
i
,
q
∈
C
j
)
dist_{min}(C_i,C_j)=min(|p-q|)\qquad (p \in C_i,q\in C_j)
distmin(Ci,Cj)=min(∣p−q∣)(p∈Ci,q∈Cj)
最大距离法
以所有簇间样本点距离的最大值作为簇间距离
d
i
s
t
m
a
x
(
C
i
,
C
j
)
=
m
a
x
(
∣
p
−
q
∣
)
(
p
∈
C
i
,
q
∈
C
j
)
dist_{max}(C_i,C_j)=max(|p-q|)\qquad (p \in C_i,q\in C_j)
distmax(Ci,Cj)=max(∣p−q∣)(p∈Ci,q∈Cj)
平均距离法
中心法
AGNES(AGglomerative NESting)算法
算法流程
- 将数据集中的每个样本点当作一个类别
- 计算所有样本点之间的两两距离,从中挑选出最小距离的两个点构成一个簇
- 继续计算剩余样本点之间的两两距离和点与簇之间的距离,然后将最小距离的点或簇合并到一起
- 重复步骤2、3,直到满足聚类的个数或其他设定的条件,便结束算法运行
层次聚类可以提供数据的可能划分的整个层次结构
层次聚类无法识别异常点
密度聚类算法(★★★★★)
- 点的 ε \varepsilon ε领域:在某点p处,给定半径e后,所得到的覆盖区域
- 核心对象:对于给定的最少样本量MinPts而言,若某点p的 ε \varepsilon ε领域内至少包含MinPts个样本点,则点p就为核心对象
- 边界点:密度大于1且小于min_samples的点
- 噪声点:不属于任何簇的样本点
- 直接密度可达
- 密度可达
- 密度相连
DBSCAN算法
优:
- 可以对任意形状的稠密数据集进行聚类
- 可以在聚类的同时发现异常点,对数据集中的异常点不敏感
- 聚类结果没有偏倚
缺
- 若样本集的密度不均匀、聚类间距相差很大时,聚类质量较差
- 若样本集较大时,聚类收敛时间较长
- 调参相对复杂,主要是对距离阈值 ε \varepsilon ε,领域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响
代码:
线性回归:
导入库包读入数据
import pandas as pd
data=pd.read_csv(r'E:/DataMining_Data/线性回归.csv',sep=',')
data.head()
#定义自变量
x=data[['价格']]
#定义因变量
y=data[['消费量']]
构建模型:
from sklearn.linear_model import LinearRegression
#建模
lrModel=LinearRegression()
lrModel.fit(x,y)
查看模型
#查看参数b
lrModel.coef_
#查看截距a
lrModel.intercept_
模型评估:
##求解R^2
lrModel.score(x,y)
分类:
导入库包
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
读入数据
##1)读入数据
iris=datasets.load_iris()
X=iris.data
y=iris.target
(3)数据预处理:
空值处理,标准化,离散化,编码等
## 2)数据规范化处理
# 导入第三方包
from sklearn.preprocessing import minmax_scale
# 对所有自变量数据作标准化处理
predictors = ccpp.columns[:-1]
X = minmax_scale(ccpp[predictors])
X
(4)数据集拆分:
# 3)将数据集拆分为训练集和测试集
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsRegressor
import numpy as np
X_train, X_test, y_train, y_test = train_test_split(X, ccpp.PE, test_size = 0.25, random_state = 1234)
(5)寻址最优参数(交叉验证法,网格搜索法):该步有可能有
### 3)寻找最好的k
from sklearn.neighbors import KNeighborsClassifier
best_score=0.0
best_k=-1
accuracy=[]
K=[]
for k in range(2,11):
knn_clf=KNeighborsClassifier(n_neighbors=k)
knn_clf.fit(X_train,y_train)
score=knn_clf.score(X_test,y_test)
accuracy.append(score)
K.append(k)
if score>best_score:
best_k=k
best_score=score
print("best_k",best_k)
print("best_score",best_score)
arg_max = np.array(accuracy).argmax()
(6)构建模型、预测:
from sklearn import metrics
# 重新构建模型,并将最佳的近邻个数设置为5
knn_class = neighbors.KNeighborsClassifier(n_neighbors = 5, weights = 'distance')
# 模型拟合
knn_class.fit(X_train, y_train)
# 模型在测试数据集上的预测
y_pred = knn_class.predict(X_test)
(8)模型评估:
# 模型整体的预测准确率
knn_class.score(X_test,y_test)
knn_class.score(X_test,y_test),
classification_report(y_test,y_predict);
confusion_matrix(y_test,y_predict)