python学习DAY22打卡

作业:

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

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

import warnings
warnings.filterwarnings("ignore") #忽略警告信息
# 数据处理清洗包
import pandas as pd
import numpy as np
import random as rnd
# 可视化包
import seaborn as sns
import matplotlib.pyplot as plt
# 机器学习算法相关包
from sklearn.linear_model import LogisticRegression, Perceptron, SGDClassifier
# 设置中文字体(解决中文显示问题)
plt.rcParams['font.sans-serif'] = ['SimHei']  # Windows系统常用黑体字体
plt.rcParams['axes.unicode_minus'] = False    # 正常显示负号
data_train = pd.read_csv(r'train.csv')    #读取训练集数据
data_test = pd.read_csv(r'test.csv')    #读取测试集数据
combine = [data_train, data_test] # 合并数据
#这只是放到一个列表,以便后续合并,现在还没合并
print(data_train.isnull().sum())
print(data_test.isnull().sum())
#删除无用特征 Ticket 
print("Before", data_train.shape, data_test.shape, combine[0].shape, combine[1].shape)
data_train = data_train.drop(['Ticket'], axis=1)
data_test = data_test.drop(['Ticket'], axis=1)
combine = [data_train, data_test]
print("After", data_train.shape, data_test.shape, combine[0].shape, combine[1].shape)# 转换分类特征Sex
for dataset in combine:dataset['Sex'] = dataset['Sex'].map( {'female': 1, 'male': 0} ).astype(int)  #男性赋值为0,女性赋值为1,并转换为整型数据
data_test.head()# 创建空数组
guess_ages = np.zeros((2,3))
guess_ages# 遍历 Sex (0 或 1) 和 Pclass (1, 2, 3) 来计算六种组合的 Age 猜测值
for dataset in combine:# 第一个for循环计算每一个分组的Age预测值for i in range(0, 2):for j in range(0, 3):guess_df = dataset[(dataset['Sex'] == i) & \(dataset['Pclass'] == j+1)]['Age'].dropna()age_guess = guess_df.median()# 将随机年龄浮点数转换为最接近的 0.5 年龄(四舍五入)guess_ages[i,j] = int( age_guess/0.5 + 0.5 ) * 0.5# 第二个for循环对空值进行赋值        for i in range(0, 2):for j in range(0, 3):dataset.loc[ (dataset.Age.isnull()) & (dataset.Sex == i) & (dataset.Pclass == j+1),\'Age'] = guess_ages[i,j]dataset['Age'] = dataset['Age'].astype(int)
data_train.head()# Embarked: 仅2个缺失,用众数填充
data_train['Embarked'].fillna(data_train['Embarked'].mode()[0], inplace=True)
data_test['Embarked'].fillna(data_test['Embarked'].mode()[0], inplace=True)
print(data_train.isnull().sum())
# Fare: 极少数缺失,用中位数填充
data_test['Fare'].fillna(data_test['Fare'].median(), inplace=True)# 姓名对预测生存率的影响较小,除非从中提取出有用的信息(如头衔、家庭关系等)
data_train['Title'] = data_train['Name'].str.extract(' ([A-Za-z]+)\.', expand=False)
data_train['Title'] = data_train['Title'].replace(['Lady', 'Countess', 'Dr', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')
data_train['Title'] = data_train['Title'].replace('Mlle', 'Miss').replace('Ms', 'Miss').replace('Mme', 'Mrs')
data_test['Title'] = data_test['Name'].str.extract(' ([A-Za-z]+)\.', expand=False)
data_test['Title'] = data_test['Title'].replace(['Lady', 'Countess', 'Dr', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')
data_test['Title'] = data_test['Title'].replace('Mlle', 'Miss').replace('Ms', 'Miss').replace('Mme', 'Mrs')
# 计算家庭成员数量,家庭规模可能影响生存率
data_train['FamilySize'] = data_train['SibSp'] + data_train['Parch'] + 1
data_test['FamilySize'] = data_test['SibSp'] + data_test['Parch'] + 1
# 结合 FamilySize 创建新特征(如是否独自乘船):
data_train['IsAlone'] = (data_train['FamilySize'] == 1).astype(int)
data_test['IsAlone'] = (data_test['FamilySize'] == 1).astype(int)
# 客舱甲板
# 提取客舱首字母(如果有的话)
data_train['Deck'] = data_train['Cabin'].str[0]
data_train['Deck'] = data_train['Deck'].fillna('Unknown') # 填充缺失值
data_test['Deck'] = data_test['Cabin'].str[0]
data_test['Deck'] = data_test['Deck'].fillna('Unknown') # 填充缺失值
# 删除冗余特征
data_train.drop([ 'Name', 'Cabin'], axis=1, inplace=True)
data_test.drop(['Name', 'Cabin'], axis=1, inplace=True)
# 先筛选字符串变量
discrete_features = data_train.select_dtypes(include=['object']).columns.tolist()
print("离散变量:", discrete_features)  # 打印离散变量列名data_train.rename(columns={'Sex': 'isFemale'}, inplace=True)  # 重命名列名 -> 是否女性
data_test.rename(columns={'Sex': 'isFemale'}, inplace=True)  # 重命名列名
print(data_train['isFemale'].value_counts())  # 打印Sex列的取值分布
# 对embarked和deck进行独热编码(无序)
data_train = pd.get_dummies(data_train, columns=['Embarked', 'Deck'], dtype=int, drop_first=True)
data_test = pd.get_dummies(data_test, columns=['Embarked', 'Deck'], dtype=int, drop_first=True)# 确保训练集和测试集的列顺序一致
# 排除标签列'Survived',仅比较特征列
feature_columns = [col for col in data_train.columns if col != 'Survived']
missing_cols = set(feature_columns) - set(data_test.columns)
for col in missing_cols:data_test[col] = 0
# 按照训练集特征列的顺序排序测试集列
data_test = data_test[feature_columns]print(data_train.head())
title_mapping = {'Mr': 0,'Rare': 1,'Master': 2,'Miss': 3,'Mrs': 4
}
data_train['Title'] = data_train['Title'].map(title_mapping)
data_test['Title'] = data_test['Title'].map(title_mapping)
print(data_train['Title'].value_counts())  # 打印Title列的取值分布
# 对Age, Fare 进行标准化(均值为0,方差为1)
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler = StandardScaler()
data_train[['Age', 'Fare']] = scaler.fit_transform(data_train[['Age', 'Fare']])print(data_train.head())  # 打印前几行数据
print(data_train.info())# 划分一下测试集
from sklearn.model_selection import train_test_split
X = data_train.drop(['Survived'], axis=1)  # 特征,axis=1表示按列删除
y = data_train['Survived'] # 标签
# 按照8:2划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 80%训练集,20%测试集# --- 1. 默认参数的随机森林 ---
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") # 忽略所有警告信息
import time
print("--- 1. 默认参数随机森林 (训练集 -> 测试集) ---")
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))

@浙大疏锦行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92834.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Ansys CFX Pre 中配置 RGP 表的分步指南

掌握在 Ansys CFX Pre 中设置 RGP 表的技巧,以优化仿真精度和效率。挑战在计算流体动力学 (CFD) 领域,RGP(真实气体属性)表对于准确模拟流体在不同条件下的行为至关重要。这些表格提供了详细的热力学属性&a…

C语言————原码 补码 反码 (日渐清晰版)

本文的内容通下面这篇文章有着紧密的联系,读者可以选择性阅读 C语言————二、八、十、十六进制的相互转换-CSDN博客 目录 基本概念 原码 反码 补码 转换 数据的存储方式 基本存储单位 数据的计算方式 补码的模运算原理 移位操作符 左移操作符 右移操…

函数-变量的作用域和生命周期

变量的作用域 引入问题 我们在函数设计的过程中,经常要考虑对于参数的设计,换句话说,我们需要考虑函数需要几个参数,需要什么类型的参数,但我们并没有考虑函数是否需要提供参数,如果说函数可以访问到已定义…

Ansible在配置管理中的应用

Ansible是一个开源的配置管理和应用程序部署工具,它使用YAML语言编写的Playbook来描述配置和应用部署过程。通过SSH协议与目标机器通信,Ansible可以实现批量操作,极大地提升了工作效率。核心功能Ansible的核心功能包括:配置管理&a…

【学习路线】Go语言云原生开发之路:从简洁语法到微服务架构

一、Go语言基础入门(1-2个月) (一)环境搭建与工具链Go环境安装 官方安装:从golang.org下载安装包版本管理:g、gvm等Go版本管理工具环境变量:GOROOT、GOPATH、GOPROXY配置Go Modules:…

软件工厂:推动新质生产力的组织跃迁

引言:软件工厂的建设,不在于工具多,而在于理解深;不在于上线快,而在于体系稳。不仅是“看得见的流水线”,更是“看不见的组织变革”。在新质生产力的时代命题下,软件工厂正成为连接创新与效率、…

9.0% 年增速驱动!全球自清洁滚轮拖布机器人市场2031年将迈向 946 百万美元

自清洁滚轮拖布机器人是重要的智能清洁设备,采用滚筒式拖布结构,集扫拖功能,通过高速旋转加压擦洗地面,深度除污。其活水清洁系统可实时自清洁、回收污水,避免二次污染,提升清洁效率与效果,带来…

新能源工厂的可视化碳中和实验:碳足迹追踪看板与能源调度策略仿真

摘要新能源工厂明明用着风电、光伏等清洁能源,碳排放数据却依旧居高不下?某锂电池厂耗费百万升级设备,碳足迹却难以精准追踪,能源调度全靠经验“拍脑袋”,导致成本飙升。而隔壁企业通过可视化碳中和实验,碳…

数据结构自学Day13 -- 快速排序--“非递归利用栈实现”

一、快速排序回顾 快速排序本质上是**“分而治之”(Divide and Conquer)策略的递归应用。但递归其实就是函数栈的一种体现,因此我们也可以显式使用栈(stack)来模拟递归过程**,从而实现非递归版本的快速排序…

前端数据库:IndexedDB 基础使用

前言 在现代 Web 开发中,随着应用程序复杂度的增加,对本地存储的需求也越来越高。虽然 localStorage 和 sessionStorage 可以满足一些简单的数据存储需求,但当需要存储大量结构化数据或进行复杂查询时,它们就显得力不从心了。这时…

Kubernetes深度解析:企业级容器编排平台的核心实践

引言:Kubernetes的战略地位与核心价值在云原生技术生态中,​​Kubernetes​​已成为容器编排的事实标准。根据2023年全球云原生调查报告:全球​​96%​​ 的组织正在使用或评估Kubernetes企业生产环境Kubernetes采用率增长​​400%​​&#…

Netty中future和promise用法和区别

定义与概念 Future:表示一个异步操作的结果。它是只读的,意味着你只能查看操作是否完成、是否成功、获取结果或者异常等信息,但不能主动设置操作的结果。Promise:是 Future 的可写扩展。它不仅可以像 Future 一样查看操作结果&…

微算法科技(NASDAQ:MLGO)采用分布式哈希表优化区块链索引结构,提高区块链检索效率

随着区块链技术的快速发展,其在各个领域的应用越来越广泛。然而,区块链数据的存储和检索效率问题一直是制约其发展的瓶颈之一。为了解决这一问题,微算法科技(NASDAQ:MLGO)采用了分布式哈希表(DHT)技术来优化…

Jmeter的元件使用介绍:(三)配置元件详解01

Jmeter的配置元件有非常多,常用的有:信息头管理器、Cookie管理器、用户定义的变量、Http请求默认值、JDBC Connection Configuration、CSV 数据文件设置、计数器等,本文会对这些常用的配置元件一一介绍,还有其他很多配置元件&…

git 连接GitHub仓库

一、安装 git 包在官网下载 git 包二、通过SSH密钥与GitHub远程仓库连接1. 检查本地 SSH 密钥是否存在ls -al ~/.ssh如果看到 id_rsa 和 id_rsa.pub,说明已有密钥。2.如果没有,生成新的 SSH 密钥:ssh-keygen -t ed25519 -C "your_email…

如何通过AI扫描代码中的问题

代码质量其实在需求高压,业务快速迭代的场景下往往容易被人忽视的问题,大家的编码习惯和规范也经常会各有喜好,短期之内获取看不出来什么问题,但长此以往就会发现,屎山逐步成型了,而线上代码跑着往往就不想…

Java 大视界 -- Java 大数据机器学习模型在金融衍生品市场波动特征挖掘与交易策略创新中的应用(363)

Java 大视界 -- Java 大数据机器学习模型在金融衍生品市场波动特征挖掘与交易策略创新中的应用(363)引言:正文:一、Java 构建的金融数据处理架构1.1 多源异构数据实时融合1.2 新闻舆情与市场冲击建模二、Java 驱动的波动特征挖掘与…

Cartographer安装测试与模块开发(三)--Cartographer在Gazebo仿真环境下的建图以及建图与定位阶段问题(实车也可参考)

参数介绍之所以要首先介绍参数而不是实操,是因为大部分建图失败、漂移基本上都是参数设置错误引起的,或者说大部分都是TF存在问题,主要是坐标系Frame之间有冲突或者对不上等原因导致的,因此把参数放在前面介绍,了解了参…

uniapp nvue开发App 横竖屏切换丢失上下文导致 setTimeout和clearTimeout报错

报错内容如下 [JS Framework] Failed to find taskCenter (35). [JS Framework] Failed to execute the callback function:TypeError: c.clearTimeout is not a function reportJSException >>>> exception function:__WEEX_CALL_JAVASCRIPT__, exception:JavaSc…

Mirauge3D 赋能:全自动建模,让城市规划与建筑设计拥有高分辨率实景三维模型

在数字化浪潮席卷各行各业的当下,高精度、多元化的空间数据已成为基础测绘、智慧城市建设、自然资源管理等领域高质量发展的核心支撑。从城市交通网络的智能规划到国土空间的优化配置,从灾害监测的精准预警到生态环境保护的科学决策,空间数据…