{T}

数据挖掘实践

本页整合原《实践 1-5》五个数据挖掘实战项目,覆盖分类、聚类、回归、关联、文本挖掘五大方向的实际落地。

五个项目均遵循「业务理解 → 数据理解 → 数据准备 → 建模训练 → 评估应用」的数据挖掘流程。核心启示:算法部分往往最简单,如何处理需求、构建特征、调整思路才是关键

项目一:酒店信息消歧(XGBoost 分类)

问题:判断两条酒店数据是否为同一家酒店,用于消除供应商间信息冲突,减少人工比对。

业务理解

  • 不同供应商对同一酒店的名称、地址、经纬度记录可能不一致,需大量人工比对。
  • 通过模型输出「是 / 否 / 无法确定」三态判断,不确定的走人工审核。

特征工程(核心)

  • 名称、地址分词成结构化字段。
  • Levenshtein、Jaro-Winkler、q-gram 距离把文字比较转成数值特征。
  • 经纬度用 haversine 距离

模型训练与评估

python
import xgboost as xgb
from sklearn.metrics import confusion_matrix

clf = xgb.XGBClassifier(nthread=-1, max_depth=6, n_estimators=30,
                        learning_rate=0.01, colsample_bytree=.9, gamma=1,
                        reg_alpha=4, objective='binary:logistic',
                        eta=0.2, subsample=0.8)
clf.fit(X_train, y_train)
# pickle 保存模型,confusion_matrix 评估

价值:项目节省 60% 运营人力成本。


项目二:相似城市聚类(Word2Vec + K-Means)

问题:寻找用户认知中相似的城市,用于旅行推荐。

方案

城市没有统一的标准特征向量,于是借助用户游记文本:用 Word2Vec 无监督学习游记得到词向量,再对城市词库匹配的词向量做 K-Means 聚类。

代码实现

python
from gensim.models import Word2Vec
from sklearn.cluster import KMeans
import joblib

model = Word2Vec(getSentence(), size=200, window=15, min_count=10, workers=...)
# 城市词库 mddwords.txt 匹配取词向量
wordvector = [model.wv[city] for city in cities if city in model.wv]
labels = KMeans(n_clusters=2000, max_iter=100, n_jobs=10).fit_predict(wordvector)
joblib.dump(model, 'word2vec.model')   # 保存模型

调参经验:聚类簇数经反复尝试(50/100/200/500/1000/2000),最终选 100 个簇,结果如日本关西、川藏线各成一簇。


项目三:房价预测(线性回归)

问题:用线性回归拟合房价,解读各特征对房价的影响。

模型训练

python
from sklearn.linear_model import LinearRegression
from sklearn import metrics
from sklearn.model_selection import train_test_split
import numpy as np

from sklearn.datasets import load_boston
boston = load_boston()   # 506 条、13 特征,第 14 列 MEDV 为房价中位数目标
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target,
                                                    test_size=0.2, random_state=0)
reg = LinearRegression()
reg.fit(X_train, y_train)
print(reg.intercept_, reg.coef_)   # 截距与特征系数

通过截距与斜率解读特征:正系数提升房价(如 RM 系数 3.7),负系数导致下跌(如 NOX -16)。

效果评估

python
y_pred = reg.predict(X_test)
mae = metrics.mean_absolute_error(y_test, y_pred)
mse = metrics.mean_squared_error(y_test, y_pred)
rmse = np.sqrt(metrics.mean_squared_error(y_test, y_pred))

MAE / MSE / RMSE 评估,RMSE 开根号使单位回归、解释性更强。


项目四:景点关联分析(Word2Vec + 统计关联)

问题:挖掘景点与玩法的关系,构建旅游知识图谱。

方案

遵循数据挖掘完整流程(业务理解→数据理解→方案→实施→评估→应用):

  • 方案一:用 Word2Vec 计算景点词与玩法词向量距离远近(机器条件受限,选 Word2Vec 而非 BERT)。
  • 方案二:基于统计的关联挖掘,计算景点与玩法共现次数,用支持度/置信度/提升度/确信度筛选。

评估与应用

  • 以人工校验为主,方案二作基准、方案一辅助。
  • 结果可构建知识图谱存入图数据库。

经验:关联分析方案几乎基于统计计算,方法简单,只要解决工程性问题难度不大,但价值巨大。


项目五:新闻文本分类(fastText)

问题:对新闻进行多层级、多标签、多分类。

fastText 算法

  • 类似 Word2Vec CBOW 的浅层神经网络分类算法(有监督,输出分类标签)。
  • 输入层在词向量基础上增加 n-gram 划分子词(如 n-gram=2,「某教育平台」→ 某教/教育/育平/平台),对低频词友好,可对未出现词叠加向量。
  • 训练极快(几分钟 vs BERT 几十小时),效果接近深度神经网络。

完整迭代流程

图表渲染中…

代码实现

bash
# 取词向量
./fasttext skipgram -input data.txt -output model
# 分类(标签加 __label__ 前缀、空格分隔)
./fasttext supervised -input train.txt -output model
# 追加查询
./fasttext print-word-vectors model.bin < queries.txt
# 产出 model.bin(参数/预测)与 model.vec(词向量)

经验:分类体系为三层级多标签;对难区分的标签(如「娱乐-动漫」与「文化-漫画」)需合并处理。


实践项目小结

项目算法问题类型关键点
酒店信息消歧XGBoost分类特征工程(文本/距离特征)
相似城市聚类Word2Vec + KMeans聚类无标签用游记文本做特征
房价预测线性回归回归系数解读 + MAE/MSE/RMSE
景点关联分析Word2Vec + 统计关联共现统计 + 知识图谱
新闻文本分类fastText分类n-gram + 多层级多标签

延伸阅读

版本差异(数据科学栈 → 当前版本)

本文编写时当前稳定版升级要点
Python3.8-3.123.143.12+ 起性能显著提升;3.14 PEP 649/750
NumPy1.x/2.02.3.xnp.float_ 等别名移除;NEP 50 类型提升
Pandas1.x/2.x3.0.xCopy-on-Write 默认开启;inplace 移除;字符串 dtype 变化
Matplotlib3.x3.x 稳定版API 兼容,样式更新
Seaborn0.12/0.130.13.xAPI 稳定
scikit-learn1.x1.7.xAPI 稳定,新算法持续加入

本文讲解的数据分析流程(读取→清洗→分析→可视化)与核心 API 在最新版本中成立;升级时重点关注 Pandas 3.0 的 Copy-on-Write 与 NumPy 2.x 的类型变化。