简而言之,对数据进行挖掘,从中提取出有效的信息。一般我们会把这种信息通过概念、规则、规律、模式等有组织的方式展示出来,形成所谓的知识。特别是在这个大数据时代,当数据多到一定程度,统计学原理会让一些内在的、不易察觉的规律慢慢放大、展示出来,而数据挖掘,就是希望在这种大数据背景下,以一种更加高效的方式,找到这些潜在的规律。
数据挖掘的基本流程可以总结为以下几个阶段:数据探索、数据预处理、数据建模、模型评估和模型部署应用。
数据预处理是数据挖掘流程中至关重要的环节,其目的在于将原始数据转换成更适合分析的形式,以提高后续建模的效果和准确性。详细介绍数据预处理的各个方面如下:
对于时间序列数据,预处理可能包括平滑处理、季节性和趋势去除、时间窗口的选择等。这些步骤有助于识别和强化数据中的重要模式和结构。
对于文本数据,预处理步骤可能包括词干提取、停用词去除、词袋模型或TF-IDF转换。这些步骤将非结构化的文本数据转换为结构化的数值格式,便于进一步的分析和建模。
特征选择的目的是从原始数据中选择出最有用的特征,以提高模型的性能和准确度。信息熵和信息增益是两种常用于特征选择的方法
信息熵是衡量数据集纯度或混乱程度的指标,是所有可能事件产生的信息量的期望值。它在决策树算法中用来衡量一个系统的无序程度。信息熵越高,数据的不确定性越大。
设随机变量
X
X
X 有
n
n
n 个可能的取值,每个值的概率分别为
p
1
p_1
p1?,
p
2
p_2
p2?,
…
\dots
…,
p
n
p_n
pn?,则
X
X
X 的信息熵
H
(
X
)
H(X)
H(X) 定义为:
H
(
X
)
=
?
∑
i
=
1
n
p
i
log
?
2
p
i
H(X) = -\sum_{i=1}^{n} p_i \log_2 p_i
H(X)=?i=1∑n?pi?log2?pi?
信息增益衡量使用特征分割数据集前后信息熵的变化。在决策树中,它用来确定哪个特征最适合用于分割数据集。信息增益越大,意味着使用该特征分割得到的纯度提升越大。
设 D 为待分割的数据集,其信息熵为 H ( D ) 。使用特征 A 分割 D 后得到 m 个子集 D 1 , D 2 , … , D m ,特征 A 对于数据集 D 的信息增益 I G ( D , A ) 定义为: 设 D 为待分割的数据集,其信息熵为 H(D) 。使用特征 A 分割 D 后得到 m 个子集D_1, D_2, \ldots, D_m,特征 A 对于数据集 D 的信息增益 IG(D, A) 定义为: 设D为待分割的数据集,其信息熵为H(D)。使用特征A分割D后得到m个子集D1?,D2?,…,Dm?,特征A对于数据集D的信息增益IG(D,A)定义为:
I G ( D , A ) = H ( D ) ? ∑ j = 1 m ( ∣ D j ∣ ∣ D ∣ ? H ( D j ) ) IG(D, A) = H(D) - \sum_{j=1}^{m} \left( \frac{|D_j|}{|D|} \cdot H(D_j) \right) IG(D,A)=H(D)?j=1∑m?(∣D∣∣Dj?∣??H(Dj?))
其中, ∣ D j ∣ 是子集 D j 中的样本数, ∣ D ∣ 是数据集 D 中的总样本数, H ( D j ) 是子集 D j 的信息熵。 其中, |D_j| 是子集 D_j 中的样本数, |D| 是数据集 D 中的总样本数, H(D_j) 是子集 D_j 的信息熵。 其中,∣Dj?∣是子集Dj?中的样本数,∣D∣是数据集D中的总样本数,H(Dj?)是子集Dj?的信息熵。
通过计算每个特征的信息增益,可以选择增益最大的特征进行数据分割。
属性最优子集选择的主要任务是从所有可能的特征组合中找出最佳的一个或几个子集。这涉及到评估每个特征子集的有效性,并选择最能提高模型性能的那个。
递归特征消除(RFE)是一种包装方法,它递归地考虑越来越小的特征集来选择特征。RFE首先训练一个模型并对每个特征评分,然后去除最不重要的特征,再次训练模型,重复这个过程,直到达到指定的特征数量。
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
# 载入数据
iris = load_iris()
X = iris.data
y = iris.target
# 创建一个逻辑回归分类器
model = LogisticRegression()
# RFE
rfe = RFE(model, n_features_to_select=3)
fit = rfe.fit(X, y)
# 输出结果
print("Num Features: %s" % (fit.n_features_))
print("Selected Features: %s" % (fit.support_))
print("Feature Ranking: %s" % (fit.ranking_))
代价敏感学习和提升度分析是评估和改进模型性能的重要工具。
在数据挖掘和机器学习中,评价指标用于衡量模型的性能。
准确性(Accuracy):模型预测正确的比例。准确性是最直观的性能指标,适用于类别分布均衡的场景。
A c c u r a c y = N u m b e r ? o f ? c o r r e c t ? p r e d i c t i o n s T o t a l ? n u m b e r ? o f ? p r e d i c t i o n s Accuracy = \frac{Number\ of\ correct\ predictions}{Total\ number\ of\ predictions} Accuracy=Total?number?of?predictionsNumber?of?correct?predictions?
精确性(Precision):正确预测为正的实例占所有预测为正的实例的比例。精确性在需要最小化误报(比如垃圾邮件检测中误判为垃圾邮件的正常邮件)的场景中非常重要。
P
r
e
c
i
s
i
o
n
=
T
r
u
e
?
P
o
s
i
t
i
v
e
s
T
r
u
e
?
P
o
s
i
t
i
v
e
s
+
F
a
l
s
e
?
P
o
s
i
t
i
v
e
s
Precision = \frac{True\ Positives}{True\ Positives + False\ Positives}
Precision=True?Positives+False?PositivesTrue?Positives?
召回率(Recall):正确预测为正的实例占实际正实例的比例。召回率在需要最小化漏报(如疾病筛查中漏诊病例)的情况下特别重要。
R
e
c
a
l
l
=
T
r
u
e
?
P
o
s
i
t
i
v
e
s
T
r
u
e
?
P
o
s
i
t
i
v
e
s
+
F
a
l
s
e
?
N
e
g
a
t
i
v
e
s
Recall = \frac{True\ Positives}{True\ Positives + False\ Negatives}
Recall=True?Positives+False?NegativesTrue?Positives?
F1分数(F1 Score):精确性和召回率的调和平均值,是一个综合考虑精确性和召回率的指标。F1分数在类别不平衡的情况下尤其有用,因为它同时考虑了误报和漏报。
F
1
?
S
c
o
r
e
=
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\ Score = 2 \times \frac{Precision \times Recall}{Precision + Recall}
F1?Score=2×Precision+RecallPrecision×Recall?