当前位置: 首页 > ds >正文

day15 python 复习日

作业:
尝试找到一个kaggle或者其他地方的结构化数据集,用之前的内容完成一个全新的项
目,这样你也是独立完成了一个专属于自己的项目。
要求:
1.有数据地址的提供数据地址,没有地址的上传网盘贴出地址即可。
2.尽可能与他人不同,优先选择本专业相关数据集
3.探索一下开源数据的网站有哪些?
对于数据的认识,很重要的一点是,很多数据并非是为了某个确定的问题收集的,这
也意味着一份数据你可以完成很多不同的研究,自变量,因变量的选取取决于你自
己-----很多时候针对现有数据的思考才是真正拉开你与他人差距的最重要因素。
现在可以发现,其实掌握流程后,机器学习项目流程是比较固定的,对于掌握的同学
来说,工作量非常少。所以这也是很多论文被懂的认为比较水的原因所在。所以这类
研究真正核心的地方集中在以下几点:
1.数据的质量上,是否有好的研究主题但是你这个数据很难获取,所以你这个研究
    有价值
2.研究问题的选择上,同一个数据你找到了有意思的点,比如更换了因变量,做出
    了和别人不同的研究问题
3.同一个问题,特征加工上,是否对数据进一步加工得出了新的结论----你的加工
    被证明是有意义的。
后续我们会不断给出,在现有框架上,如何加大工作量的思路。
进阶思考:
1.数据本身是否能够支撑起这个研究?---数据的数目、质量
2.数据的来源是否可靠?
3.什么叫做数据的质量?
4.筛选数据源的标准是什么?
我这次选择的是新闻推荐的数据集,以预测用户未来点击新闻文章为任务。该数据来自某新闻APP平台的用户交互数据,包括30万用户,近300万次点击,共36万多篇不同的新闻文章,同时每篇新闻文章有对应的embedding向量表示。


1.数据读取与基础信息概览
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings# 忽略警告信息
warnings.filterwarnings("ignore")# 设置中文字体(解决中文显示问题)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系统常用黑体字体
plt.rcParams['axes.unicode_minus'] = False    # 正常显示负号# 读取数据
data = pd.read_csv('news.csv')# 检查数据的基本信息
print(data.info())
print(data.head())# 数据转换:假设 click_article_id 为 0 表示未点击,非 0 表示点击
data['click'] = data['click_article_id'].apply(lambda x: 1 if x > 0 else 0)# 特征选择
# 假设我们的目标是预测用户的点击行为(click),将其他列作为特征
X = data.drop(['user_id', 'click_article_id'], axis=1)  # 特征
y = data['user_id']  # 标签# 时间戳特征处理:提取小时和分钟
data['click_hour'] = pd.to_datetime(data['click_timestamp'], unit='ms').dt.hour
data['click_minute'] = pd.to_datetime(data['click_timestamp'], unit='ms').dt.minute
X = data.drop(['click_article_id', 'click', 'click_timestamp'], axis=1)  # 更新特征集# 按照8:2划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 80%训练集,20%测试集# 打印训练集和测试集的形状
print("训练集特征形状:", X_train.shape)
print("测试集特征形状:", X_test.shape)
print("训练集标签形状:", y_train.shape)
print("测试集标签形状:", y_test.shape)

2.默认随机森林测试集表现评估
from sklearn.ensemble import RandomForestClassifier #随机森林分类器from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 用于评估分类器性能的指标
from sklearn.metrics import classification_report, confusion_matrix #用于生成分类报告和混淆矩阵
import warnings #用于忽略警告信息
warnings.filterwarnings("ignore") # 忽略所有警告信息
# --- 1. 默认参数的随机森林 ---
# 评估基准模型,这里确实不需要验证集
print("--- 1. 默认参数随机森林 (训练集 -> 测试集) ---")
import time # 这里介绍一个新的库,time库,主要用于时间相关的操作,因为调参需要很长时间,记录下会帮助后人知道大概的时长
start_time = time.time() # 记录开始时间
rf_model = RandomForestClassifier(random_state=42)
rf_model.fit(X_train, y_train) # 在训练集上训练
rf_pred = rf_model.predict(X_test) # 在测试集上预测
end_time = time.time() # 记录结束时间print(f"训练与预测耗时: {end_time - start_time:.4f} 秒")
print("\n默认随机森林 在测试集上的分类报告:")
print(classification_report(y_test, rf_pred))
print("默认随机森林 在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, rf_pred))

3.新闻点击预测任务

玩家:模型中的特征,如点击文章ID、点击时间戳等,就像游戏中的玩家。

游戏:利用模型预测用户未来是否会点击某篇新闻文章。

合作:不同的特征子集,例如点击时间戳和点击环境组合,共同为预测提供信息。

奖励/价值:特定特征子集用于预测时所产生的预测值,比如预测用户点击新闻文章的概率。

目标:将预测结果相对平均预测结果的“收益”,合理地分配给每个参与的特征,以明确各特征在预测中的贡献。

4.SHAP 计算随机森林测试集特征贡献值
import shap
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker# 初始化 SHAP 解释器
explainer = shap.TreeExplainer(rf_model)# 计算 SHAP 值(基于测试集)
shap_values = explainer.shap_values(X_test)
4.1 SHAP 依赖图
print("--- SHAP 决策图 ---")
# 假设是二分类问题,选择第一个类别的 SHAP 值
fig = shap.decision_plot(explainer.expected_value[0],  # 模型的平均输出值,第一个类别shap_values[0],  # 第一个类别的 SHAP 值X_test.iloc[:500],  # 前500个样本的特征数据feature_names=X_test.columns.tolist(),  # 特征名称列表feature_order='hclust',  # 特征排序方式show=False
)# 设置横轴的范围
plt.xlim(0.96, 1.02)plt.title("SHAP Decision Plot")
plt.show()

@浙大疏锦行

http://www.xdnf.cn/news/4066.html

相关文章:

  • 复杂网络系列:第 5 部分 — 社区检测和子图
  • 在写setup时遇到的问题与思考
  • Circular Plot系列(一): 环形热图绘制
  • 《马小帅的Java闯关记》
  • 模型部署与提供服务
  • QpushButton 扩展InteractiveButtonBase
  • k230摄像头初始化配置函数解析
  • nproc命令查看可用核心数量详解
  • [Windows] 智绘教 v20250403a 屏幕批注工具
  • day 12 三种启发式算法:遗传算法、粒子群算法、退火算法
  • 用卷积神经网络 (CNN) 实现 MNIST 手写数字识别
  • Python函数完全指南:从零基础到灵活运用
  • 深度学习中保存最优模型的实践与探索:以食物图像分类为例
  • GTID(全局事务标识符)的深入解析
  • 高翔《视觉SLAM十四讲》中第13讲,单目稠密重建中的RMODE数据集
  • TS 元组
  • 2025年PMP 学习三
  • 游戏开发的TypeScript(4)TypeScript 的一些内置函数
  • TF-IDF算法详解
  • C# 定时器实现
  • 正态分布习题集 · 题目篇
  • 递归算法详解(Java 实现):从原理到高阶应用
  • 类和对象(上)
  • C语言 指针(5)
  • 两台电动缸同步算法
  • n8n 构建一个 ReAct AI Agent 示例
  • 数理性能大幅提升|暴雨一体机适配DeepSeek Prover v2
  • C++类_成员函数指针
  • 移动 Trae 目录到 E 盘 - 解决 C 盘空间不足问题
  • 在Qt Creator中使用CUDA