机器学习实例-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())


   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  \

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())


       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  

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()处理浮点数据

先用均值填充:

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

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

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

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

print(age_df.head(10))


         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"]


         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]

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

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)

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

目录
相关文章
|
1月前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型:从数据预处理到模型优化
在机器学习的实践中,构建一个高效的模型并非一蹴而就。本文将深入探讨如何通过精确的数据预处理、合理的特征选择、适当的模型构建以及细致的参数调优来提升模型的性能。我们将讨论数据清洗的重要性,探索特征工程的策略,分析不同算法的适用场景,并分享模型调参的实用技巧。目标是为读者提供一套系统的方法论,以指导他们在构建机器学习模型时能够更加高效和目标明确。
32 3
|
1月前
|
机器学习/深度学习 数据采集 数据挖掘
构建高效机器学习模型:从数据预处理到模型优化
【2月更文挑战第23天】 在机器学习领域,构建一个高效的模型并非易事。它涉及从数据预处理到特征工程,再到模型选择和调优的一系列复杂步骤。本文将引导读者通过实际案例理解这一过程,展示如何通过细致的数据清洗、智能的特征选择、合理的模型架构设计以及精确的超参数调整来提升模型性能。我们将探讨处理不平衡数据集的策略,采用交叉验证来减少过拟合风险,并使用网格搜索等技术找到最优超参数。文章还将分享一些实用的技巧和常见问题的解决方案,以帮助实践者在构建机器学习模型时避免常见的陷阱。
|
1月前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型:从数据预处理到模型调优
【2月更文挑战第23天】 在数据驱动的时代,构建一个高效的机器学习模型是解决复杂问题的关键。本文将深入探讨如何通过有效的数据预处理、特征工程、选择合适的算法以及细致的模型调优来提升模型的性能。我们将摒弃传统摘要的束缚,直接深入讨论各个环节对模型性能的影响,并分享实践中的经验教训。
|
1月前
|
机器学习/深度学习 数据采集 自然语言处理
构建高效机器学习模型:从数据预处理到模型优化
在机器学习的实践中,一个精确且高效的模型是成功解决问题的关键。本文将深入探讨如何从原始数据的收集与处理开始,通过选择合适的算法,再到模型的训练与优化,最终构建出一个高性能的机器学习模型。我们将讨论数据预处理的重要性、特征工程的策略、常用机器学习算法的选择标准以及超参数调整的最佳实践。通过案例分析和技术讲解,本文旨在为读者提供一个清晰的构建高效机器学习模型的蓝图。
|
1月前
|
机器学习/深度学习 数据采集 大数据
构建高效机器学习模型:从数据预处理到模型优化
【2月更文挑战第25天】 在当今数据驱动的时代,构建一个高效的机器学习模型对于解决实际问题至关重要。本文将详细介绍如何从数据预处理开始,逐步构建并优化一个机器学习模型。我们将讨论数据清洗、特征工程、模型选择、超参数调优等关键步骤,并通过实例演示如何应用这些技术。通过阅读本文,您将掌握构建高性能机器学习模型的方法和技巧。
|
17天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型:从数据预处理到模型优化
【4月更文挑战第6天】本文聚焦于机器学习模型的开发流程,旨在提供一套系统的方法论以构建出更高效的模型。我们将深入探讨数据预处理的重要性,特征工程的策略,以及如何通过交叉验证和超参数调优来提升模型性能。文章不仅涉及理论分析,还包括了实际案例的代码实现,为读者呈现一个从数据处理到模型部署的完整蓝图。
14 0
|
18天前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型:从数据预处理到模型优化
【4月更文挑战第5天】 在机器学习领域,构建一个高效的模型并非易事。它涉及多个阶段,包括数据预处理、特征工程、模型选择、训练以及最终的评估和优化。本文深入探讨了如何通过精确的数据预处理技巧和细致的特征工程来提升模型性能,同时介绍了几种常见的模型优化策略。我们的目标是为读者提供一套实用的指导方案,帮助他们在面对复杂数据集时能够有效地构建和调整机器学习模型。
|
29天前
|
机器学习/深度学习 算法 PyTorch
基于Pytorch的机器学习Regression问题实例(附源码)
基于Pytorch的机器学习Regression问题实例(附源码)
32 1
|
1月前
|
机器学习/深度学习 数据采集 算法
构建高效的机器学习模型:从数据预处理到模型优化
【2月更文挑战第30天】 在机器学习的实践中,构建一个高效且准确的预测模型是每个数据科学家的核心任务。本文将深入探讨如何通过一系列策略性步骤来提升模型的性能,包括数据预处理、特征选择、模型训练以及超参数调优。我们将讨论各种技术方法,并通过实例展示这些策略是如何在实际问题中应用的。目标是为读者提供一套实用的工具和思路,以应对机器学习项目中遇到的挑战。
|
1月前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型:从数据预处理到模型优化
【2月更文挑战第26天】 在当今数据驱动的时代,构建一个高效的机器学习模型对于解决复杂问题至关重要。本文将深入探讨机器学习模型的构建过程,包括数据预处理、特征选择、模型训练和优化等方面。通过实例分析和技巧分享,读者将学会如何提高模型的性能和泛化能力,从而更好地应对各种实际问题。