本页整合原《实践 1-5》五个数据挖掘实战项目,覆盖分类、聚类、回归、关联、文本挖掘五大方向的实际落地。
五个项目均遵循「业务理解 → 数据理解 → 数据准备 → 建模训练 → 评估应用」的数据挖掘流程。核心启示:算法部分往往最简单,如何处理需求、构建特征、调整思路才是关键。
问题:判断两条酒店数据是否为同一家酒店,用于消除供应商间信息冲突,减少人工比对。
import xgboost as xgb
from sklearn.metrics import confusion_matrix
clf = xgb.XGBClassifier(n_jobs=-1, max_depth=6, n_estimators=30,
learning_rate=0.01, colsample_bytree=.9, gamma=1,
reg_alpha=4, objective='binary:logistic',
subsample=0.8) # eta 即 learning_rate,二者只传其一
clf.fit(X_train, y_train)
# pickle 保存模型,confusion_matrix 评估价值:项目节省 60% 运营人力成本。
问题:寻找用户认知中相似的城市,用于旅行推荐。
城市没有统一的标准特征向量,于是借助用户游记文本:用 Word2Vec 无监督学习游记得到词向量,再对城市词库匹配的词向量做 K-Means 聚类。
from gensim.models import Word2Vec
from sklearn.cluster import KMeans
import joblib
# gensim 4.x:size 改名 vector_size,iter 改名 epochs
model = Word2Vec(getSentence(), vector_size=200, window=15, min_count=10, workers=4)
# 城市词库 mddwords.txt 匹配取词向量
wordvector = [model.wv[city] for city in cities if city in model.wv]
labels = KMeans(n_clusters=100, max_iter=100).fit_predict(wordvector) # n_jobs 已在 sklearn 0.23 移除
joblib.dump(model, 'word2vec.model') # 保存模型调参经验:聚类簇数经反复尝试(50/100/200/500/1000/2000),最终选 100 个簇,结果如日本关西、川藏线各成一簇。
问题:用线性回归拟合房价,解读各特征对房价的影响。
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 fetch_california_housing
housing = fetch_california_housing() # 20640 条、8 特征,目标为街区房屋价值中位数
X_train, X_test, y_train, y_test = train_test_split(housing.data, housing.target,
test_size=0.2, random_state=0)
reg = LinearRegression()
reg.fit(X_train, y_train)
print(reg.intercept_, reg.coef_) # 截距与特征系数早期教材常用
load_boston(506 条、13 特征的波士顿房价数据),该接口因伦理争议已在 scikit-learn 1.2(2022-10)中移除,本文改用fetch_california_housing。
通过截距与斜率解读特征:正系数推高房价(如收入中位数 MedInc),负系数压低房价(如纬度 Latitude)。
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 开根号后与原数据同单位、解释性更强。
问题:挖掘景点与玩法的关系,构建旅游知识图谱。
遵循数据挖掘完整流程(业务理解→数据理解→方案→实施→评估→应用):
经验:关联分析方案几乎基于统计计算,方法简单,只要解决工程性问题难度不大,但价值巨大。
问题:对新闻进行多层级、多标签、多分类。
# 取词向量
./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.5.x | np.float_ 等别名移除;NEP 50 类型提升 |
| Pandas | 1.x/2.x | 2.3.x | CoW 可经选项开启(3.0 起将默认);inplace 将移除;str dtype 将为默认 |
| Matplotlib | 3.x | 3.x 稳定版 | API 兼容,样式更新 |
| Seaborn | 0.12/0.13 | 0.13.x | API 稳定 |
| scikit-learn | 1.x | 1.9.x | API 稳定,新算法持续加入 |
本文讲解的数据分析流程(读取→清洗→分析→可视化)与核心 API 在最新版本中成立;升级时重点关注 Pandas 3.0 的 Copy-on-Write 与 NumPy 2.x 的类型变化。