24/9/3算法笔记 kaggle泰坦尼克

news/2024/9/17 7:50:53/ 标签: 笔记

题目:

这次我用两种算法做了这道题

逻辑回归二分类算法

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score,classification_report
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, LabelEncoder

读入数据

train_data = pd.read_csv("C:\\Users\\91144\\Desktop\\kaggle比赛数据\\泰坦尼克\\titanic\\train.csv")
test_data = pd.read_csv("C:\\Users\\91144\\Desktop\\kaggle比赛数据\\泰坦尼克\\titanic\\test.csv")

**这边有一点我居然现在才懂,训练模型后面会拆分为一部分的训练和一部分的测试模型用来训练模型,而不是用所给的测试数据来做

然后接下来是固定的特征处理,处理不需要的特征,我的理解就是和预测的目标特征无关的,然后将有些字符串可以用独热编码一系列操作合并。

还有就是特征缩放,特征缩放可以帮助算法更有效地收敛,并提高模型的性能。这里用的是最小-最大缩放

data = train_data
#删除一些无关信息
data.drop(['Name','PassengerId','Ticket','Cabin'],axis=1,inplace=True)
data['Age']=data['Age'].fillna(data['Age'].mean())
data['Fare']=data['Fare'].fillna(data['Fare'].mean())
data['Embarked']=data['Embarked'].fillna(data['Embarked'].value_counts().index[0])#将性别与登船港口进行独热编码
dumm=pd.get_dummies(data[['Sex','Embarked']],drop_first=True)
data=pd.concat([data,dumm],axis=1)
data.drop(['Sex','Embarked'],axis=1,inplace=True)#数据缩放
data['Age']=(data['Age']-data['Age'].min()) / (data['Age'].max()-data['Age'].min())
data['Fare']=(data['Fare']-data['Fare'].min()) / (data['Fare'].max()-data['Fare'].min())
print(data)

划分训练集和测试集

from sklearn.model_selection import train_test_split
X=data.drop('Survived',axis=1)
y=data['Survived']
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)

然后使用逻辑回归模型

from sklearn.linear_model import LogisticRegression
LR=LogisticRegression()
LR.fit(X_train,y_train)
print('训练集准确率:\n',LR.score(X_train,y_train))
print('验证集准确率:\n',LR.score(X_test,y_test))

同样的测试数据也要进行相同的特征处理,一开始没做,然后报错了。

**哦对在,查看别的大佬的时候我看见了一个大佬不一样的特征处理,他将不同情况的人分成

不同段的人(比如Mr,Miss,Master等),非常有意思。

下面是我的训练集的处理

test_data = pd.read_csv("C:\\Users\\91144\\Desktop\\kaggle比赛数据\\泰坦尼克\\titanic\\test.csv")
data = test_data
#删除一些无关信息
data.drop(['Name','PassengerId','Ticket','Cabin'],axis=1,inplace=True)
data['Age']=data['Age'].fillna(data['Age'].mean())
data['Fare']=data['Fare'].fillna(data['Fare'].mean())
data['Embarked']=data['Embarked'].fillna(data['Embarked'].value_counts().index[0])#将性别与登船港口进行独热编码
dumm=pd.get_dummies(data[['Sex','Embarked']],drop_first=True)
data=pd.concat([data,dumm],axis=1)
data.drop(['Sex','Embarked'],axis=1,inplace=True)#数据缩放
data['Age']=(data['Age']-data['Age'].min()) / (data['Age'].max()-data['Age'].min())
data['Fare']=(data['Fare']-data['Fare'].min()) / (data['Fare'].max()-data['Fare'].min())
print(data)

最后就可以预测测试集了

y_pred = LR.predict(data)
print(y_pred)

结合数据保存

df = pd.read_csv("C:\\Users\\91144\\Desktop\\kaggle比赛数据\\泰坦尼克\\titanic\\test.csv")# 提取 'PassengerId' 列
passenger_ids = df['PassengerId']result=pd.DataFrame({'PassengerId':passenger_ids ,'Survived':y_pred.astype(np.int32)})result.to_csv('combined_columns.csv', index=False)

此算法的分数是

还有用了决策树算法

import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
import graphviz
from sklearn.model_selection import train_test_split
from sklearn import tree
import pandas as pd
train_data = pd.read_csv("C:\\Users\\91144\\Desktop\\kaggle比赛数据\\泰坦尼克\\titanic\\train.csv")
test_data = pd.read_csv("C:\\Users\\91144\\Desktop\\kaggle比赛数据\\泰坦尼克\\titanic\\test.csv")
data = train_data
#删除一些无关信息
data.drop(['Name','PassengerId','Ticket','Cabin'],axis=1,inplace=True)
data['Age']=data['Age'].fillna(data['Age'].mean())
data['Fare']=data['Fare'].fillna(data['Fare'].mean())
data['Embarked']=data['Embarked'].fillna(data['Embarked'].value_counts().index[0])#将性别与登船港口进行独热编码
dumm=pd.get_dummies(data[['Sex','Embarked']],drop_first=True)
data=pd.concat([data,dumm],axis=1)
data.drop(['Sex','Embarked'],axis=1,inplace=True)#数据缩放
data['Age']=(data['Age']-data['Age'].min()) / (data['Age'].max()-data['Age'].min())
data['Fare']=(data['Fare']-data['Fare'].min()) / (data['Fare'].max()-data['Fare'].min())
print(data)

和二分类不一样的是这边多提取了一个特征名称这一步

#划分训练集和测试集,既预留一部分数据(30%),用于评估模型。
from sklearn.model_selection import train_test_split
X=data.drop('Survived',axis=1)
y=data['Survived']feature_names = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked_Q','Embarked_S']X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)

使用模型

model = DecisionTreeClassifier()
model.fit(X_train,y_train)

画出决策树

#构建决策树
dot_data = tree.export_graphviz(model,filled = True,rounded = True,feature_names = feature_names)graphviz.Source(dot_data)

model.fit(X_train,y_train)
print('训练集准确率:\n',model.score(X_train,y_train))
print('验证集准确率:\n',model.score(X_test,y_test))

测试集特征处理

test_data = pd.read_csv("C:\\Users\\91144\\Desktop\\kaggle比赛数据\\泰坦尼克\\titanic\\test.csv")
data = test_data
#删除一些无关信息
data.drop(['Name','PassengerId','Ticket','Cabin'],axis=1,inplace=True)
data['Age']=data['Age'].fillna(data['Age'].mean())
data['Fare']=data['Fare'].fillna(data['Fare'].mean())
data['Embarked']=data['Embarked'].fillna(data['Embarked'].value_counts().index[0])#将性别与登船港口进行独热编码
dumm=pd.get_dummies(data[['Sex','Embarked']],drop_first=True)
data=pd.concat([data,dumm],axis=1)
data.drop(['Sex','Embarked'],axis=1,inplace=True)#数据缩放
data['Age']=(data['Age']-data['Age'].min()) / (data['Age'].max()-data['Age'].min())
data['Fare']=(data['Fare']-data['Fare'].min()) / (data['Fare'].max()-data['Fare'].min())
print(data)

模型预测

y_pred = model.predict(data)
print(y_pred)

df = pd.read_csv("C:\\Users\\91144\\Desktop\\kaggle比赛数据\\泰坦尼克\\titanic\\test.csv")# 提取 'PassengerId' 列
passenger_ids = df['PassengerId']result=pd.DataFrame({'PassengerId':passenger_ids ,'Survived':y_pred.astype(np.int32)})result.to_csv('决策树combined_columns.csv', index=False)

最后的分数

两个算法的对比

逻辑回归:

  • 模型相对简单,易于理解和解释。
  • 特征权重可以直接解释为特征对事件发生概率的影响。
  • 线性模型,用于二分类问题,可以输出事件发生的概率。
  • 可以处理特征之间存在线性关系的情况。
  • 相对于决策树,逻辑回归通常更不容易过拟合。
  • 可以通过正则化技术(如L1或L2正则化)来控制模型复杂度。
  • 通常需要一些技巧来处理多分类问题,如“一对多”(One-vs-Rest)策略。
  • 通常需要对缺失数据进行处理,如填充或删除。

决策树:

  • 非线性模型,可以处理更复杂的决策边界。
  • 通过树状图的形式进行决策,可以直观地展示特征之间的非线性关系。
  • 模型可能非常复杂,具有很高的灵活性。
  • 易于可视化,决策过程直观,但可能难以解释深层次的逻辑。
  • 容易过拟合,尤其是在特征数量多于训练样本的情况下。
  • 需要剪枝(pruning)或其他技术来控制模型复杂度。
  • 可以直接处理多分类问题。
  • 可以输出每个类别的概率,但这些概率的解释可能不如逻辑回归直观。
  • 可以处理缺失数据,甚至可以在分裂时使用缺失数据作为条件。

http://www.ppmy.cn/news/1522554.html

相关文章

CentOS 常用指令及作用解析

CentOS 常用指令及作用解析 在使用CentOS操作系统时,了解并熟练掌握常用的Linux指令是非常重要的。这些指令可以帮助你进行文件管理、系统管理、网络管理等操作。本篇文章将介绍一些CentOS下常用的指令及其主要作用。 目录 文件和目录操作指令文件内容操作指令系…

5千多道安全生产证考试题库ACCESS\EXCEL数据库

安全生产是保护劳动者的安全、健康和国家财产,促进社会生产力发展的基本保证,也是保证社会主义经济发展,进一步实行改革开放的基本条件。因此,做好安全生产工作具有重要的意义。今天的数据即是安全生产资格证、许可证考试题库。 大…

Unity --- 各种关节(Joints)来模拟物体之间的连接

目录 一:2D关节 一:1 固定关节 (Fixed Joint 2D) 功能: 适用场景: 1. 平台游戏中的固定平台: 2. 拼图游戏中的固定部件: 3. 建筑游戏中的固定结构: 一:2 铰链关节 (Hinge Joint 2D) 功能: 适用场景: 一:3 弹簧关节 (Spring Joint 2D) 功能: 适用场景: 1. …

【系统架构设计师】命令行风格

命令行风格(Command Line Interface, CLI)是一种用户与计算机程序交互的方式,它主要通过文本命令来执行程序的功能。在这种风格中,用户通过键盘输入命令,程序则通过命令行界面(通常是终端或控制台窗口)显示输出和反馈信息。命令行风格因其高效、灵活和强大的功能而广泛应…

Spring2~~~

注解配置Bean Spring的 IOC 容器检查到注解就会生成对象&#xff0c;但这个注解的具体含义不会识别 配置自动扫描的包 <!--配置容器要扫描的包1. component-scan 要对指定包下的类进行扫描, 并创建对象到容器2. base-package 指定要扫描的包3. 含义是当spring容器创建/初始…

在 Go 语言中使用模块

模块很重要,因为它们允许将相关的代码文件组织到同一个包中,并以一种提高简单性和可重复性的方式组织代码。 1. 开始使用模块 从代码的角度看,模块是 Go 包和文件以及名为 go.mod 的文件的集合。在接下来的步骤中,将学习如何创建模块,然后使用它。 2. 第一步:创建项目目…

MATLAB绘图基础5:MATLAB数据导入

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 5.MATLAB数据导入 5.1 从CSV文件读取数据 C S V {\rm CSV} CSV文件是一种纯文本文件&#xff0c;文件中的数据以逗号为分隔符进行字段分隔&#xff0c;每一行数据代表一条记录&#xff0c;每…

力扣416-分割等和子集(Java详细题解)

题目链接&#xff1a;416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完01背包&#xff0c;所以现在的题解都是以01背包问题为基础再来写的。 如果大家不懂01背包的话…

人生苦短我用Python Excel文件基本操作

人生苦短我用Python Excel文件基本操作 前言文件基本操作的模块和类pathlib.Path 类os.stat_result 类time.struct_time 命名元组time 模块shutil 模块 示例查看属性拷贝文件重命名文件查找文件批量操作 测试 前言 本文主要介绍通过Python中的pathlib模块&#xff0c;完成Exce…

【Android面试八股文】你能说说FragmentPagerAdapter 和 FragmentStatePagerAdapter的区别吗?

文章目录 一、FragmentPagerAdapter1.1 工作方式1.2 生命周期1.3 优缺点1.4 适用场景1.5 示例二、FragmentStatePagerAdapter2.1 工作方式2.2 生命周期2.3 优缺点2.4 适用场景2.4 示例三、FragmentPagerAdapter和FragmentStatePagerAdapter关于instantiateItem()方法和destroyI…

【Java中的位运算和逻辑运算详解及其区别】

Java中的位运算和逻辑运算详解及其区别 在 Java 编程中&#xff0c;位运算和逻辑运算是常见的两种操作类型。位运算用于操作整数的二进制位&#xff0c;而逻辑运算则是处理布尔值 (boolean) 的运算。本文将详细讲解这两种运算及其主要区别&#xff0c;并给出相应示例。 应用场…

Docker入门学习-01

Docker 官方文档 1. Docker 基础知识 1.1 什么是 Docker&#xff1f; Docker 是一个开源的平台&#xff0c;用于开发、交付和运行应用程序。它使用容器技术&#xff0c;将应用程序及其依赖打包在一个轻量级的可移植容器中。 1.2 Docker 的主要组件 镜像&#xff08;Image&a…

Django form.save 方法的详细分析

在 Django 中&#xff0c;form.save() 方法是用于将表单中的数据保存到数据库的核心方法。它的功能和实现可以分为几个重要的部分&#xff0c;下面就是我对 form.save() 方法的详细分析&#xff1a; 1、问题背景 在 Django 中&#xff0c;我们经常会使用 Form 来处理用户提交的…

2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略(详细思路+matlab代码+python代码+论文范例)

持续更新中,2024年数学建模比赛思路代码论文都会发布到专栏内,只需订阅一次! 完整论文+代码+数据结果链接在文末! 一、第一问 问题描述:假定各种农作物未来的预期销售量、种植成本、亩产量和销售价格相对于 2023 年保持稳定,每季种植的农作物在当季销售。如果某种作物每…

mysql基础知识-锁机制

文章目录 锁类型1. 共享锁&#xff08;Shared Locks, S锁&#xff09;2. 排他锁&#xff08;Exclusive Locks, X锁&#xff09;3. 意向锁&#xff08;Intention Locks&#xff09;4. 记录锁&#xff08;Record Locks&#xff09;5. 间隙锁&#xff08;Gap Locks&#xff09;6. …

SpringBoot和Mybatis框架怎么防止SQL注入

在 Spring Boot 和 MyBatis 中&#xff0c;防止 SQL 注入的主要方法包括&#xff1a; 1.使用 MyBatis 的动态 SQL MyBatis 提供了安全构建 SQL 查询的方式&#xff0c;推荐使用动态 SQL 标签&#xff08;如 <if>、<choose>、<foreach> 等&#xff09;构建查…

安卓玩机工具-----通用安卓玩机工具 “搞机助手”界面预览 推荐

在网络中有很多很好玩的工具。方便安卓机型联机使用各种功能。系列博文将详细的演示有些工具的特点与使用方法 搞机助手 作者&#xff1a;流水断崖 目前开发功能有&#xff1a;Twrp recovery全自动刷机&#xff0c;免Root冻结、卸载预装软件&#xff0c;免Root激活&#xff…

Azure和Transformers的详细解释

Azure AI 是微软提供的人工智能 (AI) 解决方案的集合&#xff0c;旨在帮助开发人员、数据科学家和企业轻松构建和部署智能应用程序。以下是对 Azure AI 各个方面的详细解释&#xff1a; Azure AI 主要组件 Azure Cognitive Services&#xff08;认知服务&#xff09;&#xff…

音频-语言大模型原理

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

【Dash】feffery_antd_componenet 中的 AntdSpace

一、feffery_antd_componenet 中的 AntdSpace feffery_antd_components&#xff08;简称fac&#xff09;中的AntdSpace组件是一个基于Ant Design的Dash第三方组件&#xff0c;它用于在水平或垂直方向上放置多个元素&#xff0c;并提供元素之间的间距。以下是AntdSpace组件的一…