深入解析Python中的数据处理与机器学习:以泰坦尼克号数据集为例

05-01 36阅读

在现代数据分析和机器学习领域,Python已经成为最受欢迎的编程语言之一。它不仅提供了强大的库和框架,还因其简洁的语法和丰富的生态系统而备受青睐。本文将结合技术实现,深入探讨如何使用Python进行数据预处理、特征工程以及构建机器学习模型。我们将以经典的“泰坦尼克号生存预测”问题为例,逐步展示从数据加载到模型评估的完整流程。

1. 数据加载与初步探索

首先,我们需要加载数据并对其进行初步分析。这里我们使用Pandas库来读取CSV文件,并用Matplotlib和Seaborn进行可视化。

import pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# 加载数据data = pd.read_csv('titanic.csv')# 查看数据前几行print(data.head())# 检查数据基本信息print(data.info())# 描述性统计print(data.describe())

上述代码中,pd.read_csv函数用于读取CSV文件,head()函数显示数据框的前五行,info()提供数据类型和缺失值信息,而describe()则生成数值型列的统计摘要。

接下来,我们可以绘制一些图表来理解数据分布:

# 年龄分布直方图sns.histplot(data['Age'].dropna(), kde=False, bins=30)plt.title('Age Distribution')plt.show()# 生存率柱状图sns.countplot(x='Survived', data=data)plt.title('Survival Count')plt.show()

通过这些图表,我们可以直观地了解乘客年龄分布及生存情况。

2. 数据清洗与特征工程

原始数据通常包含缺失值或不一致的信息,因此需要进行清理和转换。对于泰坦尼克号数据集,主要任务包括填充缺失值、编码分类变量等。

# 填充缺失值data['Age'].fillna(data['Age'].median(), inplace=True)data['Embarked'].fillna(data['Embarked'].mode()[0], inplace=True)# 删除无用列data.drop(['Cabin', 'Ticket', 'Name'], axis=1, inplace=True)# 编码分类变量data['Sex'] = data['Sex'].map({'male': 0, 'female': 1})data = pd.get_dummies(data, columns=['Embarked'], drop_first=True)# 标准化数值特征from sklearn.preprocessing import StandardScalerscaler = StandardScaler()data[['Age', 'Fare']] = scaler.fit_transform(data[['Age', 'Fare']])

在此步骤中,我们使用了中位数填充年龄缺失值,众数填充登船港口(Embarked)缺失值,并删除了一些对预测可能没有帮助的列如客舱号(Cabin)。此外,性别(Sex)被转换为二进制数字,登船港口进行了独热编码,最后对年龄和票价进行了标准化处理。

3. 构建与训练模型

完成数据准备后,接下来就是选择合适的算法来训练模型。在这里,我们将尝试使用随机森林分类器。

from sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.metrics import accuracy_score# 分割数据集X = data.drop('Survived', axis=1)y = data['Survived']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型model = RandomForestClassifier(n_estimators=100, random_state=42)model.fit(X_train, y_train)# 预测与评估predictions = model.predict(X_test)accuracy = accuracy_score(y_test, predictions)print(f'Accuracy: {accuracy * 100:.2f}%')

这段代码首先将数据分为训练集和测试集,然后实例化了一个随机森林分类器并用训练数据拟合模型。最后,通过比较预测结果与实际标签计算出准确率。

4. 模型优化与超参数调整

为了进一步提高模型性能,可以采用网格搜索法来进行超参数调优。

from sklearn.model_selection import GridSearchCVparam_grid = {    'n_estimators': [100, 200, 500],    'max_depth': [None, 10, 20, 30],    'min_samples_split': [2, 5, 10]}grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=3, scoring='accuracy', n_jobs=-1)grid_search.fit(X_train, y_train)best_model = grid_search.best_estimator_print(f'Best Parameters: {grid_search.best_params_}')# 使用最佳模型重新评估best_predictions = best_model.predict(X_test)best_accuracy = accuracy_score(y_test, best_predictions)print(f'Optimized Accuracy: {best_accuracy * 100:.2f}%')

此部分代码定义了一个参数网格,并利用交叉验证寻找最佳组合。找到最优参数后,再次评估模型以查看改进效果。

总结

本文详细介绍了如何利用Python完成从数据加载、清理到模型构建整个过程。通过具体示例展示了各阶段所需技能和技术点。当然,这只是冰山一角,在实际应用中还需要考虑更多因素如异常检测、特征选择等。希望本篇文章能为你打开一扇通往数据分析与机器学习世界的大门!

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第620名访客 今日有39篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!