项目概述

本文将展示一个完整的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数据分析与机器学习的基本工作流程,并可将其应用于类似的结构化数据预测问题。未来工作可包括尝试更复杂的模型架构、进行更深入的特征工程以及模型解释性分析。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐