机器学习实例-titanic数据预处理

简介: 机器学习实例-titanic数据预处理

加载数据集,打印前五行:

import numpy as np
import pandas as pd
import seaborn as sns
from scipy import stats,integrate
import matplotlib.pyplot as plt
%matplotlib inline
data=pd.read_csv("Desktop/titanic_train.csv")
print(data.head())
AI 代码解读


   PassengerId  Survived  Pclass  \
0 1 0 3
1 2 1 1
2 3 1 3
3 4 1 1
4 5 0 3
                                            Name     Sex   Age  SibSp  \
AI 代码解读

0 Braund, Mr. Owen Harris male 22.0 1
1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1
2 Heikkinen, Miss. Laina female 26.0 0
3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1
4 Allen, Mr. William Henry male 35.0 0

Parch Ticket Fare Cabin Embarked
0 0 A/5 21171 7.2500 NaN S
1 0 PC 17599 71.2833 C85 C
2 0 STON/O2. 3101282 7.9250 NaN S
3 0 113803 53.1000 C123 S
4 0 373450 8.0500 NaN S



查看原始数据统计结果:
print(data.describe())
AI 代码解读


       PassengerId    Survived      Pclass         Age       SibSp  \
count 891.000000 891.000000 891.000000 714.000000 891.000000
mean 446.000000 0.383838 2.308642 29.699118 0.523008
std 257.353842 0.486592 0.836071 14.526497 1.102743
min 1.000000 0.000000 1.000000 0.420000 0.000000
25% 223.500000 0.000000 2.000000 20.125000 0.000000
50% 446.000000 0.000000 3.000000 28.000000 0.000000
75% 668.500000 1.000000 3.000000 38.000000 1.000000
max 891.000000 1.000000 3.000000 80.000000 8.000000
        Parch        Fare  
AI 代码解读

count 891.000000 891.000000
mean 0.381594 32.204208
std 0.806057 49.693429
min 0.000000 0.000000
25% 0.000000 7.910400
50% 0.000000 14.454200
75% 0.000000 31.000000
max 6.000000 512.329200



可以看到Age这一项有缺失值。

填充缺失值有很多种方法,最常见的比如说均值填充,中位数填充,等等。

首先看一下年龄数据的原始分布状况:

sns.distplot(data["Age"].dropna(),kde=True,bins=50,fit=stats.gamma)#dropna()处理浮点数据
AI 代码解读

先用均值填充:

data["Age"]=data["Age"].fillna(data["Age"].mean())
sns.distplot(data["Age"].dropna(),kde=True,bins=50,fit=stats.gamma)
AI 代码解读

可以明显看到图像已经变形,虽然也可以用均值填充的数据进行训练,但如果可以改进填充方式,就可以使数据分布更接近实际。

于是我们提取一些与年龄相关的特征,比如船票(年轻人通常比较穷,富人年纪大),家庭成员数量,兄弟姐妹数量,船舱等级等。

在正式训练数据前,先通过线性回归大致预测一下年龄缺失的部分人的年龄。

print(age_df.head(10))
AI 代码解读


         Age     Fare  Parch  SibSp  Pclass
0 22.000000 7.2500 0 1 3
1 38.000000 71.2833 0 1 1
2 26.000000 7.9250 0 0 3
3 35.000000 53.1000 0 1 1
4 35.000000 8.0500 0 0 3
5 27.525206 8.4583 0 0 3
6 54.000000 51.8625 0 0 1
7 2.000000 21.0750 1 3 3
8 27.000000 11.1333 2 0 3
9 14.000000 30.0708 0 1 2


可以看到,船票价格相比其他数据非常高,先对船票价格进行标准化处理
#标准化
from sklearn import preprocessing
age_df=data[["Age","Fare","Parch","SibSp","Pclass"]].copy()#.copy()用于复制原始数据,否则在为DataFrame对象新增一列数据时会报错“A value is trying to be set on a copy of a slice from a DataFrame.”
#scaler=preprocessing.StandardScaler()
#age_df["Fare_scaled"]=scaler.fit_transform(age_df.loc[:,"Fare"])#数据维数问题出错了,暂不知如何解决
age_df["Fare_scaled"] = preprocessing.scale(age_df.loc[:,"Fare"])
print(age_df.head(10))
del age_df["Fare"]
AI 代码解读


         Age     Fare  Parch  SibSp  Pclass  Fare_scaled
0 22.000000 7.2500 0 1 3 -0.502445
1 38.000000 71.2833 0 1 1 0.786845
2 26.000000 7.9250 0 0 3 -0.488854
3 35.000000 53.1000 0 1 1 0.420730
4 35.000000 8.0500 0 0 3 -0.486337
5 27.525206 8.4583 0 0 3 -0.478116
6 54.000000 51.8625 0 0 1 0.395814
7 2.000000 21.0750 1 3 3 -0.224083
8 27.000000 11.1333 2 0 3 -0.424256
9 14.000000 30.0708 0 1 2 -0.042956


数据处理结束,分割数据集:
#分割有缺失值的数据集
known_age=age_df[age_df.Age.notnull()]
unknown_age=age_df[age_df.Age.isnull()]
#print(known_age.head())
x=known_age.iloc[:,1:]
y=known_age.iloc[:,0]
x_test=unknown_age.iloc[:,1:]
y_pred=unknown_age.iloc[:,0]
AI 代码解读

训练模型,预测结果,填充缺失值:

from sklearn import linear_model
lr = linear_model.LinearRegression()
model=lr.fit(x,y)
y_pred=lr.predict(x_test)
data.loc[data.Age.isnull(),"Age"]=y_pred
sns.distplot(data["Age"].dropna(),kde=True,bins=50,fit=stats.gamma)
AI 代码解读

填充结果如上图,相比均值填充,通过模型填充缺失值得到了更符合真实分布的数据。

目录
打赏
0
0
0
0
1244
分享
相关文章
从零到一:手把手教你完成机器学习项目,从数据预处理到模型部署全攻略
【10月更文挑战第25天】本文通过一个预测房价的案例,详细介绍了从数据预处理到模型部署的完整机器学习项目流程。涵盖数据清洗、特征选择与工程、模型训练与调优、以及使用Flask进行模型部署的步骤,帮助读者掌握机器学习的最佳实践。
618 1
Struts 2:在技术变革的风暴中航行,探索框架的革命性未来与创新融合之路
【8月更文挑战第31天】Struts 2作为一款成熟的企业级Java Web框架,凭借其稳定性和灵活性自2007年以来广受欢迎。它基于MVC设计模式,支持插件架构和RESTful服务,并能与Spring框架良好集成。然而,面对微服务架构和容器化技术(如Docker和Kubernetes)的兴起,Struts 2需提供更轻量级和支持指南来适应变化。通过深化与现代前端框架(如React和Vue.js)及AI技术的集成,并强化安全性与开发工具,Struts 2有望保持竞争力并迎接未来挑战。
109 0
"解锁机器学习数据预处理新姿势!SQL,你的数据金矿挖掘神器,从清洗到转换,再到特征工程,一网打尽,让数据纯净如金,模型性能飙升!"
【8月更文挑战第31天】在机器学习项目中,数据质量至关重要,而SQL作为数据预处理的强大工具,助力数据科学家高效清洗、转换和分析数据。通过去除重复记录、处理缺失值和异常值,SQL确保数据纯净;利用数据类型转换和字符串操作,SQL重塑数据结构;通过复杂查询生成新特征,SQL提升模型性能。掌握SQL,就如同拥有了开启数据金矿的钥匙,为机器学习项目奠定坚实基础。
117 0
人工智能平台PAI产品使用合集之PAI-DSW实例服务器ping不通google.com,该如何排查
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
构建高效机器学习模型:从数据预处理到模型优化
【5月更文挑战第28天】在机器学习领域,构建一个高效的模型并非易事。它要求我们不仅对算法有深入的理解,还需要掌握数据处理、特征工程以及模型调优等多方面知识。本文将引导读者了解如何从原始数据的收集与清洗开始,逐步进行特征选择和工程,最后通过各种方法对模型进行细致调优。我们将讨论数据预处理的重要性、特征工程的策略以及使用交叉验证、网格搜索等技术来提升模型性能。
构建高效机器学习模型:从数据预处理到模型优化
【5月更文挑战第31天】 在当今数据驱动的时代,构建一个高效的机器学习(ML)模型是解决复杂问题的关键。本文将引导读者通过一系列细致的步骤来搭建健壮且精确的ML模型。我们将重点讨论数据预处理的策略、选择合适的算法、模型训练的技巧以及性能优化的方法。通过实例和代码示例,本技术分享旨在为从业者提供实用的指导,帮助他们在面对实际问题时能够灵活应用机器学习技术,并达到提高预测准确率和模型泛化能力的目的。
构建高效机器学习模型:从数据预处理到模型优化
【5月更文挑战第30天】 在机器学习项目的实施过程中,数据科学家和工程师们经常面临一个复杂且多变的挑战——如何构建一个既准确又高效的模型。本文将深入探讨构建高效机器学习模型的关键步骤,包括数据预处理的技巧、特征选择的策略、模型训练的细节以及超参数调优的方法。通过实践案例的分析,我们将展示如何克服过拟合、提高模型的泛化能力,并最终实现在保持高准确率的同时,提升模型的运行效率。
构建高效机器学习模型:从数据预处理到模型优化
【5月更文挑战第28天】 在本文中,我们将探讨构建高效机器学习模型的关键步骤。与传统的摘要不同,我们将重点关注数据预处理、特征选择、模型训练和优化等方面,以提供一个全面的技术性指南。我们将讨论如何通过这些步骤提高模型的性能和准确性,以及如何解决常见的技术挑战。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问