数据挖掘常考的计算方法主要围绕分类、聚类、回归、关联规则、离群点检测等核心任务展开。以下是这些核心计算方法的详细解析、公式、案例及实现代码。1. 分类 (Classification)分类旨在基于已知标签的训练数据构建模型以预测新数据的类别标签。1.1 决策树 (Decision Tree) - 信息增益计算决策树通过选择最优特征进行数据划分核心是计算信息增益 (Information Gain)或增益率。核心公式信息熵 (Entropy)度量数据集的不确定性。Ent(D) -∑_{k1}^{|y|} p_k * log₂(p_k)其中D为数据集p_k为第k类样本所占的比例。信息增益使用特征A对数据集D进行划分所获得的信息纯度提升。Gain(D, A) Ent(D) - ∑_{v1}^{V} (|D_v| / |D|) * Ent(D_v)其中V是特征A的取值个数D_v是D中在特征A上取值为v的子集。生动案例预测是否适合打网球。特征天气(晴/阴/雨)、温度(热/温/凉)、湿度(高/正常)、有风(是/否)标签玩(是/否)。计算步骤计算整个数据集D的信息熵Ent(D)。假设14条记录中9条“玩”5条“不玩”则Ent(D) - (9/14)*log₂(9/14) - (5/14)*log₂(5/14) ≈ 0.940。计算按“天气”特征划分的信息增益。天气有3个取值晴、阴、雨分别计算每个子集D_晴、D_阴、D_雨的熵然后加权求和。D_晴5条2条玩3条不玩 -Ent(D_晴) ≈ 0.971D_阴4条4条玩0条不玩 -Ent(D_阴) 0D_雨5条3条玩2条不玩 -Ent(D_雨) ≈ 0.971加权熵 (5/14)*0.971 (4/14)*0 (5/14)*0.971 ≈ 0.6943.信息增益Gain(D, 天气) 0.940 - 0.694 0.246。同理计算其他特征温度、湿度、有风的信息增益选择增益最大的特征作为根节点进行分裂。Python代码示例 (使用scikit-learn)data {天气: [0,0,1,2,2,2,1,0,0,2,0,1,1,2], 湿度: [0,0,0,0,1,1,1,0,1,1,1,0,1,0], 有风: [0,1,0,0,0,1,1,0,0,0,1,1,0,1], 玩: [0,0,1,1,1,0,1,0,1,1,1,1,1,0]} df pd.DataFrame(data) X df[[天气, 湿度, 有风]] y df[玩] # 划分训练集和测试集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42) # 创建并训练决策树模型 clf tree.DecisionTreeClassifier(criterionentropy) # 使用信息熵 clf.fit(X_train, y_train) # 预测并评估 y_pred clf.predict(X_test) print(f决策树预测准确率: {accuracy_score(y_test, y_pred):.2f})1.2 支持向量机 (SVM)间隔最大化SVM的目标是找到一个超平面使得两类样本之间的间隔 (Margin)最大。核心思想与计算对于线性可分数据超平面可表示为w·x b 0。支持向量是距离超平面最近的那些点。优化目标是最大化间隔2 / ||w||等价于最小化||w||² / 2约束条件为y_i(w·x_i b) ≥ 1对于所有样本i。这通常通过拉格朗日乘子法转化为对偶问题求解。生动案例在二维平面上区分圆圈和叉叉。SVM会寻找一条直线超平面使得离这条线最近的圆圈和叉叉即支持向量到这条线的距离之和最大。这条线就是最优决策边界。Python代码示例from sklearn import svm import numpy as np # 创建简单的线性可分数据 X np.array([[1, 2], [2, 3], [2, 1], [3, 2], [6, 5], [7, 7], [6, 8], [7, 8]]) y np.array([0, 0, 0, 0, 1, 1, 1, 1]) # 两类标签 # 创建线性SVM分类器 clf svm.SVC(kernellinear) clf.fit(X, y) # 获取支持向量、超平面参数 print(f支持向量:{clf.support_vectors_})print(f超平面法向量 w: {clf.coef_[0]})print(f超平面截距 b: {clf.intercept_[0]})# 预测新样本 new_sample [[4, 4]] print(f样本 {new_sample} 的预测类别: {clf.predict(new_sample)}) 1.3 朴素贝叶斯 (Naive Bayes)贝叶斯定理基于特征条件独立假设应用贝叶斯定理计算后验概率。核心公式P(类别|特征) [P(特征|类别) * P(类别)] / P(特征)由于分母对所有类别相同比较分子即可预测类别 argmax_{类别} P(类别) * ∏_{i1}^{n} P(特征_i|类别)其中P(特征_i|类别)对于连续特征常假设为高斯分布。生动案例垃圾邮件过滤。已知“垃圾邮件”和“正常邮件”中某些关键词如“免费”、“会议”出现的概率。当新邮件到来时计算它属于“垃圾邮件”和“正常邮件”的联合概率先验概率 * 各关键词条件概率的乘积概率大的即为预测类别。Python代码示例# 加载鸢尾花数据集 iris load_iris() X_train, X_test, y_train, y_test train_test_split(iris.data, iris.target, test_size0.3) # 创建并训练高斯朴素贝叶斯模型假设特征服从高斯分布 gnb GaussianNB() gnb.fit(X_train, y_train) # 预测并查看某个样本的预测概率 y_pred gnb.predict(X_test) sample_idx 0 print(f样本 {X_test[sample_idx]} 属于各类别的预测概率: {gnb.predict_proba([X_test[sample_idx]])}) print(f实际类别: {y_test[sample_idx]}, 预测类别: {y_pred[sample_idx]})2. 聚类 (Clustering)聚类是无监督学习旨在将相似的数据点分组。2.1 K-Means聚类最小化簇内平方误差算法迭代地将数据点划分到K个簇中使得每个点到其所属簇中心的距离平方和最小。目标函数J ∑_{i1}^{K} ∑_{x ∈ C_i} ||x - μ_i||²其中K是簇数C_i是第i个簇μ_i是簇C_i的质心均值x是簇中的点。计算步骤初始化随机选择K个点作为初始质心。分配步骤将每个数据点分配到距离最近的质心所在的簇。更新步骤重新计算每个簇的质心该簇所有点的均值。迭代重复步骤2和3直到质心不再发生显著变化或达到最大迭代次数。生动案例对商场顾客进行分群。特征可以是年龄、年收入、消费频率。K-Means会将年龄收入相近、消费习惯相似的顾客自动归到同一个簇便于商场进行精准营销。Python代码示例from sklearn.cluster import KMeans import matplotlib.pyplot as plt import numpy as np # 生成模拟数据 np.random.seed(42) X np.vstack([np.random.randn(100, 2) * 0.5 [2, 2], np.random.randn(100, 2) * 0.5 [-2, -2], np.random.randn(100, 2) * 0.5 [2, -2]]) # 使用K-Means进行聚类设定K3 kmeans KMeans(n_clusters3, random_state42, n_init10) kmeans.fit(X) labels kmeans.labels_ centers kmeans.cluster_centers_ # 可视化结果 plt.scatter(X[:, 0], X[:, 1], clabels, cmapviridis, alpha0.6) plt.scatter(centers[:, 0], centers[:, 1], cred, markerX, s200, label簇中心) plt.title(K-Means聚类结果) plt.legend() plt.show() print(f簇中心坐标:{centers})print(f前10个点的簇标签: {labels[:10]})3. 回归 (Regression)回归用于预测连续型目标变量。3.1 线性回归 (Linear Regression)最小二乘法寻找一条直线或超平面y w₁x₁ w₂x₂ ... w_nx_n b使得所有样本的预测值与真实值之间的残差平方和 (RSS)最小。目标函数min ∑_{i1}^{m} (y_i ŷ_i)² min ∑_{i1}^{m} (y_i - (w·x_i b))²其中m是样本数y_i是真实值ŷ_i是预测值。求解通过求导令导数为零可得闭式解正规方程w (XᵀX)⁻¹Xᵀy。对于大规模数据常用梯度下降法迭代求解。生动案例根据房屋面积(x₁)、房间数(x₂)、房龄(x₃)预测房价(y)。线性回归会学习出每个特征的权重 (w₁, w₂, w₃) 和偏置(b)形成预测公式。Python代码示例from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score import numpy as np # 生成模拟数据: y 3*x1 5*x2 2 噪声 np.random.seed(42) X np.random.rand(100, 2) * 10 y 3 * X[:, 0] 5 * X[:, 1] 2 np.random.randn(100) * 2 # 创建并训练线性回归模型 model LinearRegression() model.fit(X, y) # 查看学到的参数 print(f模型系数 (w): {model.coef_}) print(f模型截距 (b): {model.intercept_:.2f}) # 预测并评估 y_pred model.predict(X) print(f均方误差 (MSE): {mean_squared_error(y, y_pred):.2f}) print(f决定系数 (R²): {r2_score(y, y_pred):.2f}) # 越接近1越好 4. 关联规则 (Association Rules)用于发现大规模数据集中项之间的有趣联系如“购物篮分析”。4.1 Apriori算法 - 支持度与置信度核心度量支持度 (Support)项集{X, Y}在数据集中出现的频率。Support(X→Y) P(X∪Y) 包含X和Y的交易数 / 总交易数。置信度 (Confidence)在包含X的交易中也包含Y的条件概率。Confidence(X→Y) P(Y|X) Support(X∪Y) / Support(X)。提升度 (Lift)衡量规则的有效性Lift(X→Y) Confidence(X→Y) / Support(Y)。提升度1表示规则有效。算法步骤找出所有满足最小支持度的频繁1项集。使用频繁(k-1)-项集生成候选k-项集。扫描数据库计算候选集的支持度剔除不满足最小支持度的项集。重复步骤2-3直到不能生成新的频繁项集。从频繁项集中生成满足最小置信度的关联规则。生动案例超市交易记录显示{支持度(牛奶,面包)0.4 置信度(牛奶→面包)0.67}。意味着40%的顾客同时买了牛奶和面包而在买牛奶的顾客中有67%也买了面包。Python代码示例 (使用mlxtend库)from mlxtend.frequent_patterns import apriori, association_rules from mlxtend.preprocessing import TransactionEncoder import pandas as pd # 模拟交易数据 dataset [[牛奶, 面包, 尿布],[可乐, 面包, 尿布, 啤酒],[牛奶, 尿布, 啤酒, 鸡蛋],[面包, 牛奶, 尿布, 啤酒],[面包, 牛奶, 尿布, 可乐]]# 数据预处理转换为One-Hot编码格式 te TransactionEncoder() te_ary te.fit(dataset).transform(dataset) df pd.DataFrame(te_ary, columnste.columns_) # 使用Apriori算法找出频繁项集最小支持度设为0.5 frequent_itemsets apriori(df, min_support0.5, use_colnamesTrue) print(频繁项集:) print(frequent_itemsets) # 从频繁项集中挖掘关联规则最小置信度设为0.7 rules association_rules(frequent_itemsets, metricconfidence, min_threshold0.7) print(关联规则 (按提升度降序):)print(rules[[antecedents, consequents, support, confidence, lift]].sort_values(bylift, ascendingFalse))5. 离群点检测 (Outlier Detection)识别显著偏离其他数据的观测值。5.1 基于统计的方法 Z-Score假设数据服从正态分布计算每个数据点的Z分数绝对值过大的点被视为离群点。计算公式Z_i (x_i - μ) / σ其中μ是均值σ是标准差。通常将|Z| 3的数据点视为离群点根据3σ原则。生动案例监控网站日均访问量。某天访问量激增计算其Z分数远大于3可能意味着遭受了网络攻击或发生了热点事件。Python代码示例import numpy as np import matplotlib.pyplot as plt # 生成包含离群点的数据 np.random.seed(42) data np.concatenate([np.random.randn(100) * 10 50, np.array([150, 5])]) # 100个正常点2个离群点 # 计算Z-Score mean np.mean(data) std np.std(data) z_scores np.abs((data - mean) / std) # 定义阈值通常为3 threshold 3 outliers data[z_scores threshold] print(f数据均值: {mean:.2f}, 标准差: {std:.2f}) print(f检测到的离群点值: {outliers}) print(f离群点的Z-Score: {z_scores[z_scores threshold]}) # 可视化 plt.figure(figsize(10,4)) plt.subplot(1,2,1) plt.boxplot(data) plt.title(箱线图) plt.subplot(1,2,2) plt.scatter(range(len(data)), data, cz_scores threshold, cmapcoolwarm) plt.axhline(ymean threshold*std, colorr, linestyle--, labelf{threshold}σ) plt.axhline(ymean - threshold*std, colorr, linestyle--, labelf-{threshold}σ) plt.title(Z-Score离群点检测) plt.legend() plt.tight_layout() plt.show()6. 降维 (Dimensionality Reduction)减少特征数量保留主要信息常用于可视化或预处理。6.1 主成分分析 (PCA) - 特征值分解通过线性变换将原始特征转换为一组各维度线性无关的主成分按方差大小排序。核心计算步骤标准化对原始数据去均值化通常也除以标准差。计算协方差矩阵Cov (1/(n-1)) * XᵀX。特征值分解求解协方差矩阵的特征值和特征向量。选择主成分将特征值从大到小排序选择前k个最大的特征值对应的特征向量作为投影矩阵。转换数据将原始数据投影到选定的特征向量上得到降维后的数据Y X * W_k其中W_k是由前k个特征向量组成的矩阵。生动案例描述一个人有100个特征身高、体重、学历、收入、爱好...。PCA可以找出最能区分不同人的几个“综合特征”主成分比如第一个主成分可能代表“体型与财富”第二个代表“文化与兴趣”用这两个维度就能大致在二维图上描绘每个人。Python代码示例# 加载鸢尾花数据集 (4个特征) iris load_iris() X iris.data y iris.target # 应用PCA降维到2维 pca PCA(n_components2) X_pca pca.fit_transform(X) print(f各主成分的方差解释率: {pca.explained_variance_ratio_}) print(f累计方差解释率: {sum(pca.explained_variance_ratio_):.2f}) # 可视化降维结果 plt.figure(figsize(8,6)) scatter plt.scatter(X_pca[:, 0], X_pca[:, 1], cy, cmapviridis, edgecolork) plt.xlabel(主成分 1) plt.ylabel(主成分 2) plt.title(PCA: 鸢尾花数据集降维可视化) plt.colorbar(scatter, label鸢尾花种类) plt.show()总结对比计算方法核心目标关键公式/度量典型算法主要应用场景分类预测离散类别标签信息增益、间隔最大化、后验概率决策树、SVM、朴素贝叶斯垃圾邮件识别、图像分类、信用评分聚类将相似数据分组无标签簇内平方误差和K-Means、DBSCAN、层次聚类客户细分、文档归类、异常检测回归预测连续数值残差平方和最小化线性回归、岭回归、Lasso回归房价预测、销量预测、趋势分析关联规则发现项集间有趣关系支持度、置信度、提升度Apriori、FP-Growth购物篮分析、推荐系统、交叉销售离群点检测识别异常数据点Z-Score、局部离群因子(LOF)Z-Score、孤立森林(Isolation Forest)欺诈检测、设备故障预警、网络入侵检测降维减少特征数量保留信息最大化方差PCAPCA、t-SNE数据可视化、特征提取、去除噪声掌握这些核心计算方法的原理、公式及适用场景是理解和应用数据挖掘技术的基础。在实际操作中结合scikit-learn、mlxtend等Python库可以高效实现这些算法。参考来源数据挖掘计算方法有哪些 | 帆软数字化转型知识库清华大学出版社--图书推荐数据挖掘常用十大算法-百度开发者中心2数据预处理_数据预处理 噪声处理-CSDN博客数据挖掘的公式怎么算出来 | 帆软数字化转型知识库