在Jupyter上简单的跑一个机器学习分析案例

这篇文章是闲暇时间里,作者对python的复习,对数据预处理、数据可视化、机器学习知识的复习巩固,仅用于比赛准备。

注:程序全部paddle平台的jupyter上运行(如果安装了cuda的可以直接本机安装飞桨环境);

本文大部分代码摘自:

Lab3 泰坦尼克号生还预测_学习案例 - 飞桨AI Studio

一、准备数据

导包(万事先导包)

import seaborn as sns
import pandas as pd
import numpy as np

为此我们专们准备的最常用的数据集,TITANIC号船员数据集。(数据集可以到上述链接下载,也可行通过seaborn包实现在线导入)

tit = sns.load_dataset("titanic") 

导入表格文件

 # 从网站直接下载。

# tit = sns.load_dataset("titanic") 

# 或者直接通过函数加载。

features = pd.read_csv("data/data82227/titanic_dataset.csv")

 详情如图

 

二、数据预处理

1 数据预览

features.head() #预览

空值预览(这里我已经缺失值处理过了)

features.isnull().sum()  # 列出所有字段

 

2 缺失值处理

缺失值处理种方式:

        #直接删除

# Age 字段缺失值处理
import seaborn as sns
import numpy as np
sns.distplot(features["Age"].dropna(),hist=True,kde=True)

运行结果:可以看出 age 列处理后的直方分布

替换策略 :

        中值替换(两种选一种即可)

# 缺失值处理方式一: 使用中值来进行替换
# replace 接口 https://pandas.pydata.org/pandas-
# docs/stable/reference/api/pandas.DataFrame.replace.html
features["Age"].replace(np.nan,np.nanmedian(features["Age"]),inplace=True)

        直接删除

# 缺失值处理方式二: 直接删除。 主要考虑到cabin这个字段缺失值过多,
# 并且客舱号本身没有过多含义,所以删去后对结果影响不大
features.drop("Cabin",axis=1,inplace=True)

# 除了Age类别外,还需要 乘客的等级Pclass 进行中值替换

# 由于乘客是从S港口登船的,并且社会阶层是3. 所有我们可以计算这一类别乘客的中值来替代
pclass_3_fares = features.query('Pclass==3 & Embarked=="S"')["Fare"]
pclass_3_fares = pclass_3_fares.replace(np.nan,0)
median_fare = np.median(pclass_3_fares)
features["Fare"].replace(np.nan,median_fare,inplace=True)

# 特征替换,将文本转为标记的数字,才能用来训练

# 对于Sex数据,我们也需要进行处理,虽然它没有缺失值,但是 male,female并不能用来训练
features["Sex"].replace(["male","female"],[1,0],inplace=True)

 检查处理结果是否还有null数据

features.isnull().sum()

 3 数据清洗

到现在,数据是完整的,但是仍然有一些特征并不是数字或者向量的形式表征的,我们对这些特征进行 独热编码 (one-hot)表示

one-hot:把类别的变量值转换成0和1,并且形成一个矩形表,自身类别用1表示,其余类别用0表示

features = pd.get_dummies(features)

 检视数据

features.head()

4 数据分割


这个部分跟上一个实验的内容一样,我们需要把完整的数据集拆分为
        1. 特征与标签 
        2. 训练集和测试集

提示:特征与标签就不要像上次那样去分割了,可以直接通过dataframe的接口来定位column。需要用到的代码,如果你认真看完了我上面的代码,相信不在话下
训练集和测试集的分割我们仍然还是可以使用 train_test_split()

from sklearn.model_selection import KFold
from sklearn.model_selection import train_test_split
def split_data(data,y_feature):
    return train_test_split(data,data[y_feature],test_size=0.25,random_state=33)
    raise NotImplementedError


x_train,x_test,y_train,y_test = split_data(features,'Survived')

四、模型预测


本次实验我们选用决策树和逻辑回归来进行建模分类,建议大家先重温一下相关理论知识,这里不再重复。

from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
# 创建决策树模型
dtc = DecisionTreeClassifier()

# 训练模型
dtc.fit(x_train,y_train)

# 预测训练集和测试集结果
dtc_pred = dtc.predict(x_test)

# 计算精确度
dtc_acc = round(accuracy_score(dtc_pred,y_test)*100,2)
print(f"decision tree accuracy is:{dtc_acc}%")

运行结果:

使用决策树模型当前数据集下 预测的准确率为100% 

这里使用的是逻辑回归模型:


from sklearn.linear_model import LogisticRegression
# 创建逻辑回归模型
lr = LogisticRegression()

# 训练模型
lr.fit(x_train,y_train)

# 预测训练集和测试集结果
lr_pred = lr.predict(x_test)

# 计算精确度
lr_acc = round(accuracy_score(lr_pred,y_test)*100,2)
print(f"logistic accuracy is{lr_acc}%")

运行结果:

        通过以上6列属性 进行预测

        准确率近似100%        

模型处理基本流程就基本完成了。
 

  • 1
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值