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


    背景:本篇文章背景为【参考链接: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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    2.导入数据文件

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

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

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

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

    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))
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    5.构造KNN模型

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

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

    6.输出模型精度

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

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

  • 相关阅读:
    Linux 系统目录结构
    webpack5 Css 兼容性处理postcss-loader
    Leetcode209. 长度最小的子数组
    java.lang.ClassNotFoundException: javafx.util.Pair的问题解决与原因详解
    利用ChatGPT辅助理解数学建模竞赛题目与拆解问题
    机器学习领域经典书籍推荐
    Kmeans特征降维方法
    matlab 将三角剖分结果保存为STL文件
    分享一下蛋糕店在微信小程序上可以实现什么功能
    信号补零对信号频谱的影响
  • 原文地址:https://blog.csdn.net/minyeling/article/details/125566281