前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kaggle_泰坦尼克幸存者可视化

kaggle_泰坦尼克幸存者可视化

作者头像
皮大大
发布2021-03-02 14:38:11
6410
发布2021-03-02 14:38:11
举报
文章被收录于专栏:机器学习/数据可视化

泰坦尼克数据是kaggle中最经典的数据之一,本文通过对原数据的处理,利用决策树实现对幸存者的预测可视化。主要掌握的知识点:

  • 数据的导入及清洗
  • 缺失值如何处理
  • 删除不必要的属性
  • 如何将文字转成数字,让sklearn进行处理

导入相关模块和包

代码语言:javascript
复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeClassifier   # 决策树的类
from sklearn.model_selection import GridSearchCV, train_test_split, cross_val_score  # 网格搜索,TTS, 交叉验证

导入数据及查看信息

  • pandas中怎么导入数据:pd.read_csv("file_path")
  • 观察数据信息
    • head()查看前n行数据,默认是前5行
    • info()查看数据的各种属性和标签
  • 数据中部分属性存在缺失值
代码语言:javascript
复制
data = pd.read_csv(r"D:/Python/datalearning/sklearn/day08_data.csv")
data.head()

数据特点

  • Cabin属性中存在大量的缺失值
  • 数据中存在文字信息

数据预处理

严重缺失值的删除
代码语言:javascript
复制
# 将缺失值严重的数据进行删除
# axis=1:表示对列进行操作,inplace=True表示用生成的数据代替原来的数据
data.drop(["Cabin","Name","Ticket"], inplace=True, axis=1)
少量缺失值的填充
代码语言:javascript
复制
# 缺失值处理
data["Age"] = data["Age"].fillna(data["Age"].mean())   # 用均值进行填充
# 将存在缺失值数据的行进行删除,dropna默认对行进行操作
data = data.dropna()
  • Age字段中缺少量的值,通过平均值来进行填充,学习下fillna函数,默认是填充0;填充不仅仅是均值
  • Embarked字段中缺少值,将其他的字段全部dropna,使得每个属性的数据相同
查看某个属性的种类

属性的唯一性通过unique()来进行观察

代码语言:javascript
复制
# 查看属性中有多少类:通过unique()函数进行显示,结果只有3类
data["Embarked"].unique()

[OUT]:array(['S', 'C', 'Q'], dtype=object)
文字分类转成数字

由于sklearn不能处理文字,需要将上述属性的3个种类SCQ转成数字。

代码语言:javascript
复制
# 重点:如何将输出标签中的分类转成数字
labels = data["Embarked"].unique().tolist()
data["Embarked"] = data["Embarked"].apply(lambda x: labels.index(x))

sex属性中只有M-F,转成0-1

  • loc:标签索引
  • iloc:数值索引 int(True)结果为1
代码语言:javascript
复制
# data["sex"] = (data["Sex"] == "male").astype("int")
data.loc[:,"Sex"] = (data["Sex"] == "male").astype("int")   # 将生成的布尔值转成0-1, 
data.head()
样本数据获取
代码语言:javascript
复制
# 取出属性不是Survied的所有行的数据
X = data.iloc[:,data.columns != "Survived"]  
y = data.iloc[:,data.columns == "Survived"]    作为最终的输出结果
TTS
代码语言:javascript
复制
Xtrain, Xtest, ytrain, ytest = train_test_split(X,y,test_size=0.3)
乱序索引的还原

经过上面的TTS步骤,索引已经被打烂了,需要进行还原。

代码语言:javascript
复制
# Xtrain.index = range(Xtrain.shape[0])
for i in [Xtrain, Xtest, ytrain, ytest]:
    i.index = range(i.shape[0])  # 将range函数的结果赋值给索引

模型建立

  • 实例化
  • 进行拟合
  • 计算score
代码语言:javascript
复制
# 普通模型
clf = DecisionTreeClassifier(random_state=25)
clf = clf.fit(Xtrain, ytrain)
score = clf.score(Xtest,ytest)
score

# 交叉验证:结果未必会比上面的好
clf = DecisionTreeClassifier(random_state=25)
score = cross_val_score(clf,X,y,cv=10).mean()
score

不同max_depth下的模型拟合情况

代码语言:javascript
复制
tr = []
te = []
for i in range(10):
    clf = DecisionTreeClassifier(random_state=25
                                 ,max_depth=i+1     # max_depth不同
                                 ,criterion="entropy"  # 欠拟合使用entropy
                                 )
    clf = clf.fit(Xtrain, ytrain)
    score_tr = clf.score(Xtrain, ytrain)
    score_te = cross_val_score(clf,X,y,cv=10).mean()
    tr.append(score_tr)
    te.append(score_te)
# print(max(te))
plt.plot(range(1,11),tr,color="red",label="train")
plt.plot(range(1,11),te,color="blue",label="test")
plt.xticks(range(1,11))
plt.legend()
plt.show()

网格搜索

网格搜索是将多个参数的不同取值放在一起,同时进行参数的调节,找出最匹配的值,本质上是枚举技术。

代码语言:javascript
复制
# 基尼系数0-0.5;信息熵的范围是0-1;gini_threholds = np.linspace(0,0.5,50)
# [*range(1,10)]:转成列表形式
parameters = {
    "criterion":("gini","entropy")
    ,"splitter":("best","random")
    ,"max_depth":[*range(1,10)]
    ,"min_samples_leaf":[*range(1,50,5)]
    ,"min_impurity_decrease":[*np.linspace(0,0.5,50)]
}

clf = DecisionTreeClassifier(random_state=25)
GS = GridSearchCV(clf,parameters,cv=10)
GS.fit(Xtrain,ytrain)
代码语言:javascript
复制
GS.best_params_   # 返回参数和参数取值列表中的最佳组合
GS.best_score_    # 网格搜索模型后的评判标准
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-9-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导入相关模块和包
  • 导入数据及查看信息
  • 数据特点
  • 数据预处理
    • 严重缺失值的删除
      • 少量缺失值的填充
        • 查看某个属性的种类
          • 文字分类转成数字
            • 样本数据获取
              • TTS
                • 乱序索引的还原
                • 模型建立
                • 不同max_depth下的模型拟合情况
                • 网格搜索
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档