数据挖掘实践
本页整合原《实践 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 + 多层级多标签 |
延伸阅读
版本差异(数据科学栈 → 当前版本)
| 库 | 本文编写时 | 当前稳定版 | 升级要点 |
|---|---|---|---|
| Python | 3.8-3.12 | 3.14 | 3.12+ 起性能显著提升;3.14 PEP 649/750 |
| NumPy | 1.x/2.0 | 2.3.x | np.float_ 等别名移除;NEP 50 类型提升 |
| Pandas | 1.x/2.x | 3.0.x | Copy-on-Write 默认开启;inplace 移除;字符串 dtype 变化 |
| Matplotlib | 3.x | 3.x 稳定版 | API 兼容,样式更新 |
| Seaborn | 0.12/0.13 | 0.13.x | API 稳定 |
| scikit-learn | 1.x | 1.7.x | API 稳定,新算法持续加入 |
本文讲解的数据分析流程(读取→清洗→分析→可视化)与核心 API 在最新版本中成立;升级时重点关注 Pandas 3.0 的 Copy-on-Write 与 NumPy 2.x 的类型变化。