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

news2024/9/24 1:19:41

题目:

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

逻辑回归二分类算法

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.coloradmin.cn/o/2105403.html

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

相关文章

信息打点day.06

一、知识点 1、黑盒测试 黑盒测试是一种评估网络安全性的方法,它模拟了攻击者在不了解系统内部结构和工作机制的情况下,仅通过外部接口(如网络协议、应用程序界面等)尝试渗透、攻击或绕过安全控制的行为。通过模拟真实的攻击场景…

心觉:如何填平想象和愿望之间的鸿沟?

愿望是什么? 你想变得富有 你想减掉20斤 你想拥有自己的Dream Car 你想拥有S型身材 这些都是愿望,非常美好的想法或者目标 想象是什么? 我能变得富有吗,我啥也不会,除了上班,就是上班 我怎么可能减肥…

多少次幂的计算器,指数计算器

https://miniwebtool.com/zh-cn/exponents-calculator/?n10.95&n2100&prec10

智慧平台赋能政务管理,声通科技助力政务管理智能化

在智能时代的大潮中,政务管理也在不断寻求创新与突破,在这方面,涌现出了很多优秀的公司。比如声通科技的子公司西安金讯数智信息技术有限公司,就在AI政务热线领域有很多创新成果,为政务管理的智能化升级提供了新思路。…

一文教你学会java代码审计

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

如何借助前端表格控件实现债券网下发行数字化?

最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/ 概要 作为金融市场中至关重要的一环,债券行业扮演着融资、投资、风险管理等多重角色,对经济的发展和稳定起着举足轻重的作用。随着证券行业全面实施注册制的推进…

硬件工程师笔试面试——上拉电阻、下拉电阻

目录 1.3、上拉电阻 原理图 1.3.1、定义 1.3.2、作用 1.3.3、工作原理 1.3.4、选择上拉电阻的值 1.3.5、应用场景 1.3.6、与下拉电阻的区别 1.3.7、设计考虑 1.3.8电路设计中的注意事项 1.3.9、与ESD保护的结合 1.3.10、实际应用 1.3.11、上拉电阻在不同电压等级的…

如何提升网站的收录率?

要提升网站的收录率,其中一个特别有效的工具就是GPC爬虫池,这个工具通过深度研究谷歌SEO算法,吸引谷歌爬虫。 GPC爬虫池的基本原理是构建一个庞大的站群系统,并创建复杂的内链和外链结构,以吸引并留住谷歌蜘蛛 使用GP…

BF算法Java

BF算法 代码实现运行结果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/91e0700ed8144fcc87e8f8d222c0e0b8.png) BF算法又称暴力算法,运算过程相对较慢,但是也是基础的算法,这里我们可以给两个字符串,arr1 arr2 由arr1…

Nvidia扩展AI帝国:从芯片到数据中心设计的全面布局

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

HarmonyOS开发实战( Beta5.0)自定义组件冻结功能规范

自定义组件处于非激活状态时,状态变量将不响应更新,即Watch不会调用,状态变量关联的节点不会刷新。通过freezeWhenInactive属性来决定是否使用冻结功能,不传参数时默认不使用。支持的场景有:页面路由,TabCo…

移动UI:成就勋章页面该如何设计,用例子说明。

移动应用的UI成就勋章页面通常是一个展示用户在应用中取得成就和获得勋章的页面。这种页面通常用于激励用户参与应用的活动,增加用户的参与度和忠诚度。 UI设计成就勋章页面时,一般会包括以下元素和功能: 1. 勋章列表: 展示用户…

[SWPUCTF 2022 新生赛]android2-快坚持不下去的第四天

找main函数,MainActivity类名 棿棢棢棲棥棷棊棐棁棚棨棨棵棢棌加密函数 加密过程,key123456789 密文和this.key异或 key为987654321 # 已知信息 enc "棿棢棢棲棥棷棊棐棁棚棨棨棵棢棌" key 987654321# 限制 key 到 16 位范围 masked_key…

springboot+vue集成cas单点登录最详细避坑版讲解

springboot+vue+cas 前言总观问题说明第一种配置方式第二种配置方式拦截器配置重定向问题解决配置前言 本地讲解的是单纯的cas,不掺和springsecurity或者shiro等权限框架 首先说明几点注意事项: cas默认不支持前端分离的,这个后便会讲到,也是最大问题所在;前端vue不能直…

【Java 学习】:内部类详解

详谈Java内部类 📃📃本文将通过Java内部类 是什么,为什么被广泛使用,以及又该如何去使用这三个方面来详细讲解其相关知识。 文章目录 1. 内部类是什么 2. 为什么要使用内部类 3. 如何使用内部类 🍉成员内部类 &…

排列组合常用方法一:捆绑法

别问我排列组合是什么,自己看去 看完排列组合的计算方法,有些萌新就会问了,哎?有些题可不像单纯的排列组合哦,题目可能会提出各种奇怪的要求,真是五花八门耶......别急,接下来介绍一个方法&…

【进阶】面向对象之继承(二)

文章目录 一丶子类到底能继承父类中的哪些内容二丶继承中:成员变量的访问特点三丶练习代码呈现 四丶总结 一丶子类到底能继承父类中的哪些内容 构造方法是否可以被继承? 不可以 成员变量是否可以被继承? 可以 成员方法是否可以被继承? 可以,只有虚方法可以被继承 二丶继…

内核头文件, makfile 传参

1 内核头文件,主要指的是, 在板卡上的系统上直接 ,编译驱动模块,而不是在虚拟机的内核源码中 去编译内核模块。 ------------------------------------------------------------------------------------------------------------…

将x减到零的最小操作数问题

欢迎跳转我的主页:羑悻的小杀马特-CSDN博客 目录 一题目简述: 二题目思路: 三解答代码: 一题目简述: leetcode题目链接:. - 力扣(LeetCode) 二题目思路: 首先这道题…

如何在国内下载llama模型

由于项目需求要下载llama模型,本来觉得这是个很简单的事情,直接去huggingface上下载就行,但是没想到遇到了重重问题,于是写下这篇博客记录一下,希望对别人也有帮助! 刚开始搜到的教程是官方给出的&#xf…