Python大数据分析从数据清洗到机器学习的完整项目实战
项目概述
本文将展示一个完整的Python数据分析与机器学习项目实战,重点演示从原始数据清洗到构建预测模型的端到端流程。项目使用Pandas进行数据清洗和探索性分析,Scikit-learn构建机器学习模型,旨在为读者提供一套可复用的标准工作流程。
数据加载与初步探索
首先导入必要的Python库并加载数据集。本项目使用经典的波士顿房价数据集作为示例,虽然数据集已相对干净,但我们将模拟真实场景中的数据清洗过程。
```pythonimport pandas as pdimport numpy as npfrom sklearn.datasets import load_bostonimport seaborn as snsimport matplotlib.pyplot as plt# 加载数据boston = load_boston()df = pd.DataFrame(boston.data, columns=boston.feature_names)df['PRICE'] = boston.target# 查看数据基本信息print(df.info())print(df.head())```数据概览
初步查看数据集的基本信息,包括特征数量、数据类型、缺失值情况等,为后续的数据清洗工作奠定基础。
数据清洗与预处理
数据清洗是机器学习项目中至关重要的一步,直接影响模型的性能。以下是常见的数据清洗步骤:
```python# 检查缺失值print(df.isnull().sum())# 处理异常值Q1 = df.quantile(0.25)Q3 = df.quantile(0.75)IQR = Q3 - Q1df = df[~((df < (Q1 - 1.5 IQR)) | (df > (Q3 + 1.5 IQR))).any(axis=1)]# 数据标准化from sklearn.preprocessing import StandardScalerscaler = StandardScaler()X_scaled = scaler.fit_transform(df.drop('PRICE', axis=1))y = df['PRICE']```缺失值与异常值处理
通过四分位距(IQR)方法检测并处理异常值,确保模型的鲁棒性。对于缺失值,本例中数据集本身完整,但实际项目中可能需要使用填充或删除策略。
探索性数据分析(EDA)
通过可视化和统计方法深入理解数据特征和关系:
```python# 相关性分析correlation_matrix = df.corr()plt.figure(figsize=(12, 8))sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')plt.title('特征相关性矩阵')plt.show()# 目标变量分布plt.figure(figsize=(10, 6))sns.histplot(df['PRICE'], kde=True)plt.title('房价分布情况')plt.xlabel('价格')plt.ylabel('频次')plt.show()```特征相关性洞察
通过热力图可视化特征间的相关性,识别与目标变量高度相关的特征,为特征选择提供依据。
特征工程
创建新特征和转换现有特征以提高模型性能:
```python# 创建交互特征df['AGE_RM'] = df['AGE'] df['RM']# 特征选择from sklearn.feature_selection import SelectKBest, f_regressionselector = SelectKBest(score_func=f_regression, k=10)X_selected = selector.fit_transform(X_scaled, y)```特征创造与选择
通过领域知识创建有意义的交互特征,并使用统计方法选择最具预测力的特征子集,提高模型效率和性能。
机器学习模型构建
将数据拆分为训练集和测试集,并构建预测模型:
```pythonfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionfrom sklearn.ensemble import RandomForestRegressorfrom sklearn.metrics import mean_squared_error, r2_score# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split( X_selected, y, test_size=0.2, random_state=42)# 训练线性回归模型lr_model = LinearRegression()lr_model.fit(X_train, y_train)# 训练随机森林模型rf_model = RandomForestRegressor(n_estimators=100, random_state=42)rf_model.fit(X_train, y_train)```模型选择与训练
选择两种不同类型的模型进行对比:线性回归作为基准模型,随机森林作为更复杂的集成学习方法。
模型评估与优化
评估模型性能并进行超参数调优:
```python# 模型预测lr_pred = lr_model.predict(X_test)rf_pred = rf_model.predict(X_test)# 性能评估print(线性回归模型:)print(fMSE: {mean_squared_error(y_test, lr_pred):.2f})print(fR2: {r2_score(y_test, lr_pred):.2f})print(随机森林模型:)print(fMSE: {mean_squared_error(y_test, rf_pred):.2f})print(fR2: {r2_score(y_test, rf_pred):.2f})# 超参数调优from sklearn.model_selection import GridSearchCVparam_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [None, 10, 20], 'min_samples_split': [2, 5, 10]}grid_search = GridSearchCV( RandomForestRegressor(random_state=42), param_grid, cv=5, scoring='r2')grid_search.fit(X_train, y_train)print(f最佳参数: {grid_search.best_params_})```性能指标分析
使用均方误差(MSE)和决定系数(R2)评估模型性能,并通过网格搜索找到随机森林模型的最佳超参数组合。
结论与项目总结
本项目完整展示了从数据清洗到机器学习建模的全流程。结果表明,经过适当的数据预处理和特征工程,随机森林模型在波士顿房价预测任务上表现优异。通过本项目,读者可以掌握Python数据分析与机器学习的基本工作流程,并可将其应用于类似的结构化数据预测问题。未来工作可包括尝试更复杂的模型架构、进行更深入的特征工程以及模型解释性分析。
更多推荐


所有评论(0)