机器学习 泰坦尼克号——灾难中的机器学习

背景:本篇文章背景为【参考链接:https://www.kaggle.com/competitions/titanic/data】,通过KNN算法,判断生存下来的可能性大小。
训练文件链接地址【链接:https://pan.baidu.com/s/1ZmkOMhHAAfYguPK5n8sGTw
提取码:1111】
注:文章中没有讲解函数和函数的参数等,需要的人自己找度娘。

1.导入包

# 导入需要用到的包
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import pandas as pd

注:如果提示包没有导入成功,应该是没有该包 pip install XXX

2.导入数据文件

#设置目录路径
train_dir="./train_taiTanNiKeHao.csv"
# 使用numpy导入CSV数据
data=pd.read_csv(train_dir)
#打印前五行数据查看
print(data[:5])

注:文件的路径为该步最容易犯错的地方

3.数据处理【该部分最重要】

# 使用numpy导入CSV数据 其实上面已经导入了一次,只是为了防止运行该段时,无法回滚到位
data=pd.read_csv(train_dir)

#如何将数组处理成我想要的 (未必是数组)
#该段代码含义为:去掉认为对测试集没有影响或者是负面影响的数据(降低训练后的准确性)
print(type(data))
data_target=data['Survived'] 分离出测试集;
data_no_Survived=data.drop(columns=['PassengerId','Name','Cabin','Ticket','SibSp','Parch','Fare'])

#Sex
#如何对列中的所有元素进行替换  female 女=0  male 男=0
data_no_Survived.loc[data_no_Survived['Sex']=='female','Sex'] = 0
data_no_Survived.loc[data_no_Survived['Sex']=='male','Sex'] = 1
# data_no_Survived.loc[data_no_Survived['Ticket']=='LINE','Ticket'] = '-1'

#Embarked 登录地点 
#将字母转换为数字,方面训练
data_no_Survived.loc[data_no_Survived['Embarked']=='S','Embarked'] = 0
data_no_Survived.loc[data_no_Survived['Embarked']=='C','Embarked'] = 1
data_no_Survived.loc[data_no_Survived['Embarked']=='Q','Embarked'] = 2

# # #Ticket 售票价格  准备进行字符串分割,只保留价格
# 【注意】启动该代码,会造成 准确率下降百分之十左右
#【注意】启动该代码时需要,data_no_Survived=data.drop(columns=['PassengerId','Name','Cabin','Ticket','SibSp','Parch','Fare'])
 删除其中的 'Ticket'
# data_no_Survived.loc[data_no_Survived['Ticket']=='LINE','Ticket'] = '-1'
# for i in range(len(data_no_Survived)):
#     if(len(data_no_Survived['Ticket'].str.split(" ")[i])==3):
#         data_no_Survived['Ticket'][i]=data_no_Survived['Ticket'].str.split(" ")[i][2]
#     if(len(data_no_Survived['Ticket'].str.split(" ")[i])==2):
#         data_no_Survived['Ticket'][i]=data_no_Survived['Ticket'].str.split(" ")[i][1]
# #     print(data_no_Survived['Ticket'][i])

# #Fare 更改价格(往小),会造成 更好的训练结果 ;更改价格(更大),会造成更坏的训练结果
# # 【注意】  抛弃Fare训练特征参数 =》应该会得到更好的训练结果【已实践】
# for i in range(len(data_no_Survived)):
# #     data_no_Survived['Fare'][i]=float(data_no_Survived['Fare'])*20
#     data_no_Survived['Fare'][i]=data_no_Survived['Fare'][i].astype('float')*0.5
# #     print(data_no_Survived['Fare'][i])

#当AgeEmbarked中存在空值时,赋值为-1,实际中可赋值为平均数,众数等。
values = { 'Age': -1,"Embarked":-1}
data_no_Survived.fillna(value=values,inplace=True)

注:这一段能吃透,就比较厉害了,需要注意的太多了,报错了就百度吧。我也不知道会遇到什么奇葩错误。

4.训练集测试集划分

X_train,X_test,y_train,y_test=train_test_split(data_no_Survived,data_target,random_state=0)
print("训练样本数据的大小:{}".format(X_train.shape))
print("训练样本标签的大小:{}".format(y_train.shape))
print("测试样本数据的大小:{}".format(X_test.shape))
print("测试样本数据的大小:{}".format(y_test.shape))

注:非常简单,摆不定,建议劝退

5.构造KNN模型

# 构造KNN模型
knn=KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train,y_train)
y_pred=knn.predict(X_test)

注:底层怎么运行的,我也不懂,会用就行。然后找找这个算法的基本思想是怎样的就行。

6.输出模型精度

print("模型精度:{:.2f}".format(np.mean(y_pred==y_test)))

注:运行了好多回,改了好多参数。0.96最好的结果,该其他参数出现过0.6 0.7 0.8 等模型精度
放个截图:
在这里插入图片描述
加油吧,我也是刚入门,练习了一个案例。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值