自学内容网 自学内容网

【机器学习】从数据到决策——完整的机器学习项目实战解析

【机器学习】从数据到决策——完整的机器学习项目实战解析

1. 引言

机器学习项目不仅仅是训练一个模型,它涉及从数据预处理到模型评估的完整流程。本文将通过一个完整的机器学习项目,展示从数据准备到最终决策的关键步骤。这将帮助你理解如何系统地构建一个机器学习项目,并在实际中应用机器学习算法。

在这里插入图片描述

2. 项目概述

本项目将使用房价预测作为示例,展示机器学习的端到端流程。我们将从数据收集、数据预处理、特征工程、模型选择与训练、模型评估和部署等步骤进行详细解析。

目标:

预测房价并评估模型的性能,最后输出可用于实际预测的模型。

3. 数据收集与探索

3.1 数据集介绍

我们将使用经典的 波士顿房价数据集。该数据集包含波士顿不同地区房屋的相关信息,如房屋面积、房屋数量、邻里环境、房屋税等,以及目标变量——房价。

3.2 数据探索

数据探索的目的是通过统计分析和可视化手段了解数据的结构和潜在关系。通常我们会先检查数据的分布、缺失值等问题。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 加载波士顿房价数据集
from sklearn.datasets import load_boston
boston = load_boston()
data = pd.DataFrame(boston.data, columns=boston.feature_names)
data['PRICE'] = boston.target

# 数据基本信息
print(data.info())
print(data.describe())

# 可视化房价分布
sns.histplot(data['PRICE'], kde=True)
plt.title("房价分布图")
plt.show()

3.3 处理缺失值

有时数据集中会存在缺失值,必须通过适当的方式进行处理,比如使用平均值或中位数填充。

# 检查是否存在缺失值
print(data.isnull().sum())

# 用中位数填补缺失值(如果有)
data.fillna(data.median(), inplace=True)

4. 数据预处理与特征工程

4.1 数据标准化

为了让模型更有效地学习,通常需要对特征进行标准化。常用的方法是将特征缩放到相同范围,比如 0 到 1 之间或标准正态分布。

from sklearn.preprocessing import StandardScaler

# 提取特征和目标
X = data.drop('PRICE', axis=1)
y = data['PRICE']

# 标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

4.2 特征选择

通过选择相关性高的特征,模型可以更加高效。我们可以通过统计分析或者模型的权重系数来进行特征选择。

import numpy as np
from sklearn.linear_model import Lasso

# 使用 Lasso 回归选择重要特征
lasso = Lasso(alpha=0.01)
lasso.fit(X_scaled, y)
importance = np.abs(lasso.coef_)

# 输出重要特征
important_features = data.columns[np.where(importance > 0.1)]
print("重要特征:", important_features)

5. 模型选择与训练

5.1 选择合适的模型

在本项目中,我们将使用 线性回归模型随机森林回归模型,分别展示如何使用线性和非线性模型进行房价预测。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor

# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 线性回归模型
linear_model = LinearRegression()
linear_model.fit(X_train, y_train)

# 随机森林回归模型
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)

5.2 训练模型

模型训练的目的是让模型学习数据中的模式,找到特征和目标变量之间的关系。

# 线性回归模型训练
linear_model.fit(X_train, y_train)

# 随机森林模型训练
rf_model.fit(X_train, y_train)

wxsync-2023-12-969d075fff3b28397c934cbd411f5527

6. 模型评估

6.1 评估标准

模型评估是机器学习项目中的关键步骤。常用的回归评估指标包括均方误差(MSE)和决定系数(R²)。

from sklearn.metrics import mean_squared_error, r2_score

# 线性回归评估
y_pred_linear = linear_model.predict(X_test)
mse_linear = mean_squared_error(y_test, y_pred_linear)
r2_linear = r2_score(y_test, y_pred_linear)

print(f"线性回归 - 均方误差: {mse_linear}, R²: {r2_linear}")

# 随机森林评估
y_pred_rf = rf_model.predict(X_test)
mse_rf = mean_squared_error(y_test, y_pred_rf)
r2_rf = r2_score(y_test, y_pred_rf)

print(f"随机森林 - 均方误差: {mse_rf}, R²: {r2_rf}")

6.2 交叉验证

为了确保模型的稳定性和泛化能力,使用交叉验证来进一步验证模型表现。

from sklearn.model_selection import cross_val_score

# 对随机森林模型进行交叉验证
cv_scores = cross_val_score(rf_model, X_scaled, y, cv=5, scoring='neg_mean_squared_error')
print(f"交叉验证的MSE: {-cv_scores.mean()}")

7. 模型调优

7.1 超参数调优

使用网格搜索或随机搜索来寻找最佳超参数组合,进一步提高模型性能。

from sklearn.model_selection import GridSearchCV

# 定义参数网格
param_grid = {'n_estimators': [50, 100, 200], 'max_depth': [None, 10, 20, 30]}

# 使用网格搜索进行超参数调优
grid_search = GridSearchCV(RandomForestRegressor(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

print("最佳参数:", grid_search.best_params_)

在这里插入图片描述

8. 模型部署

8.1 模型保存与加载

一旦模型训练完成并通过评估,我们可以将其保存,便于后续使用或部署到生产环境。

import joblib

# 保存模型
joblib.dump(rf_model, 'random_forest_model.pkl')

# 加载模型
loaded_model = joblib.load('random_forest_model.pkl')

# 使用加载的模型进行预测
y_pred_loaded = loaded_model.predict(X_test)

8.2 模型上线

将训练好的模型部署到服务器,接受实时数据并进行预测。例如,可以通过API提供预测服务,或者在本地应用中使用模型。

9. 总结

在本项目中,我们从数据收集、预处理、特征工程、模型训练、评估到部署,完整地展示了机器学习项目的端到端流程。这个流程不仅适用于房价预测,还可以应用于各种机器学习任务。通过理解每个步骤,你可以更加系统地构建和优化机器学习项目,最终实现数据驱动的决策。

10. 参考资料

机器学习任务。通过理解每个步骤,你可以更加系统地构建和优化机器学习项目,最终实现数据驱动的决策。

10. 参考资料

使用机器学习分析热榜

在这里插入图片描述

  • csdn热榜或者说写作指南之类的有一句,鼓励文章标题为:探索xxx奥秘/深度探索xx,xx高效实战… 看着是挺诱人的,但实际读起来,因为作者水平的参差不齐,很多都是挂羊头卖狗肉,直接把书中的内容或者标准板书弄过来了。。博主也不知道要说什么。
  • 就像前两天看到群里的一位群友,说自己干活干的很多,但周报写得很简短,因此老板还以为他没出什么力,反而认为旁边改变量名的都能写进周报的同事是大牛,工作产出多

img

你好,我是Qiuner. 为帮助别人少走弯路而写博客 这是我的 github https://github.com/Qiuner⭐ gitee https://gitee.com/Qiuner 🌹

如果本篇文章帮到了你 不妨点个吧~ 我会很高兴的 😄 (^ ~ ^) 。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。

代码都在github或gitee上,如有需要可以去上面自行下载。记得给我点星星哦😍

如果你遇到了问题,自己没法解决,可以去我掘金评论区问。私信看不完,CSDN评论区可能会漏看 掘金账号 https://juejin.cn/user/1942157160101860 掘金账号

更多专栏:

掘金账号 CSDN账号

感谢订阅专栏 三连文章

原文地址:https://blog.csdn.net/qq_61654952/article/details/142357967

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!