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

DAY 22 复习日

复习日

仔细回顾一下之前21天的内容,没跟上进度的同学补一下进度。

作业:

自行学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码

kaggle泰坦里克号人员生还预测

# 导入必要的库
from imblearn.over_sampling import RandomOverSampler
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 用于评估分类器性能的指标
from sklearn.metrics import classification_report, confusion_matrix #用于生成分类报告和混淆矩阵
import warnings
from sklearn.model_selection import GridSearchCV
from sklearn.utils import compute_class_weight #用于忽略警告信息
warnings.filterwarnings("ignore") # 忽略所有警告信息# 加载数据集
train_data = pd.read_csv('train.csv')
test_data = pd.read_csv('test.csv')
# 填充缺失值
train_data['Age'].fillna(train_data['Age'].median(), inplace=True)
test_data['Age'].fillna(test_data['Age'].median(), inplace=True)
train_data['Embarked'].fillna(train_data['Embarked'].mode()[0], inplace=True)
train_data['Cabin'].fillna(train_data['Cabin'].mode()[0],inplace=True)
test_data['Fare'].fillna(test_data['Fare'].median(), inplace=True)
train_data=train_data.drop(columns='PassengerId',axis=1)# 特征工程:选择部分特征作为模型输入
features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']
train_X = pd.get_dummies(train_data[features])
test_X = pd.get_dummies(test_data[features])
train_X=train_X.astype(int)
test_X=test_X.astype(int)
X=train_X
y=train_data['Survived']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 确保训练集和测试集的特征列一致
X_train, X_test = X_train.align(X_test, join='left', axis=1, fill_value=0)# 目标变量
train_y = train_data['Survived']# 训练模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)# 预测
pred = model.predict(X_test)
print("\nrf默认分类报告:")
print(classification_report(y_test, pred))
print("rf默认在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, pred))print("\n--- 2. 网格搜索优化随机森林 (训练集 -> 测试集) ---")
from sklearn.model_selection import GridSearchCV# 定义要搜索的参数网格
param_grid = {'n_estimators': [50, 100, 200],'max_depth': [3, 5, 7, None],'min_samples_split': [2, 5, 10],'min_samples_leaf': [1, 2, 4],'max_features':['sqrt','log',0.3],'class_weight':[None,'balanced']
}# 创建网格搜索对象
grid_search = GridSearchCV(estimator=RandomForestClassifier(random_state=42), # 随机森林分类器param_grid=param_grid, # 参数网格cv=5, # 5折交叉验证n_jobs=-1, # 使用所有可用的CPU核心进行并行计算scoring='accuracy') # 使用准确率作为评分标准# 在训练集上进行网格搜索
grid_search.fit(X_train, y_train) # 在训练集上训练,模型实例化和训练的方法都被封装在这个网格搜索对象里了print("最佳参数: ", grid_search.best_params_) #best_params_属性返回最佳参数组合# 使用最佳参数的模型进行预测
best_model = grid_search.best_estimator_ # 获取最佳模型
best_pred = best_model.predict(X_test) # 在测试集上进行预测print("\n网格搜索优化后的随机森林 在测试集上的分类报告:")
print(classification_report(y_test, best_pred))
print("网格搜索优化后的随机森林 在测试集上的混淆矩阵:")
print(confusion_matrix(y_test, best_pred))
# 预测
predictions=best_model.predict(test_X)
# 生成提交文件
submission = pd.DataFrame({'PassengerId': test_data['PassengerId'],'Survived': predictions
})
print(submission)
rf默认分类报告:precision    recall  f1-score   support0       0.82      0.86      0.84       1051       0.78      0.73      0.76        74accuracy                           0.80       179macro avg       0.80      0.79      0.80       179
weighted avg       0.80      0.80      0.80       179rf默认在测试集上的混淆矩阵:
[[90 15][20 54]]--- 2. 网格搜索优化随机森林 (训练集 -> 测试集) ---
最佳参数:  {'class_weight': None, 'max_depth': 5, 'max_features': 'sqrt', 'min_samples_leaf': 1, 'min_samples_split': 2, 'n_estimators': 200}网格搜索优化后的随机森林 在测试集上的分类报告:precision    recall  f1-score   support0       0.81      0.88      0.84       1051       0.80      0.70      0.75        74accuracy                           0.80       179macro avg       0.80      0.79      0.79       179
weighted avg       0.80      0.80      0.80       179网格搜索优化后的随机森林 在测试集上的混淆矩阵:
[[92 13][22 52]]PassengerId  Survived
0            892         0
1            893         0
2            894         0
3            895         0
4            896         1
..           ...       ...
413         1305         0
414         1306         1
415         1307         0
416         1308         0
417         1309         0[418 rows x 2 columns]

最后转化为csv文件:

 submission.to_csv('submission.csv', index=False)

总结:

    两个模型在预测性能上没有显著差异,准确率相同,其他指标也非常接近。

@浙大疏锦行

http://www.lryc.cn/news/597527.html

相关文章:

  • 【提示词技巧】高级提示方法与框架
  • 第七章 Pytorch构建模型详解【构建CIFAR10模型结构】
  • 【WRF】根据自动安装脚本安装 WRF / WRF-CHEM等
  • Google Chrome V8< 14.0.221 类型混淆漏洞
  • linux中如何清除history命令
  • IAR Embedded Workbench for ARM 8.1 安装教程
  • 有没有能读懂PDF里手写批注的工具?
  • C# 值类型与引用类型的储存方式_堆栈_
  • 基于Kafka实现简单的延时队列
  • 【JVM】从 JVM 整体说明 JVM 运行的完整流程
  • C#与WPF使用mvvm简单案例点击按钮触发弹窗
  • 基于阿里云平台的文章评价模型训练与应用全流程指南
  • nginx.conf配置文件以及指令详解
  • 人工智慧是引擎,人类是方向盘:Vitalik对AI未来的深刻反思
  • 关于SPring基础和Vue的学习
  • rust嵌入式开发零基础入门教程(六)
  • 什么是MySQL 视图
  • 综合实验(3)
  • 暑期自学嵌入式——Day06(C语言阶段)
  • 7月23日星期三今日早报简报微语报早读
  • 51c大模型~合集158
  • Vue 3 组件通信全解析:从 Props 到 Pinia 的深入实践
  • 用 llama.cpp 构建高性能本地 AI 应用:从环境搭建到多工具智能体开发全流程实战
  • Python应用指南:构建和获取全球地铁线路数据及可视化
  • ToBToC的定义与区别
  • 从 XSS 到 Bot 攻击:常见网络攻击防不胜防?雷池 WAF 用全场景防护为网站筑牢安全墙
  • Java中IO多路复用技术详解
  • S段和G段到底有什么区别
  • 基于springboot的乡村旅游在线服务系统/乡村旅游网站
  • 网络--VLAN技术