【包括预测分析的设计思路的具体实现过程或实现步骤】
1. 数据离散化处理
将承重强度划分为离散等级的过程,基于文献研究和不同等级数量对模型效果的影响,尝试以下方式:
- 方案 1:等宽分箱
- 方案 2:等频分箱
- 方案 3:参考行业标准(如 C40、C50 等强度等级)
实现步骤:
- 导入数据:读取数据集,查看承重强度的分布。
- 分箱处理:使用 pd.cut 或 pd.qcut 将数据分为 3、4 或 5 个等级,赋予标签。
- 训练模型:分别在不同的离散化方案上训练模型。
- 比较性能:计算精度、查准率、查全率和 F1 值,选出最佳离散化方案。
代码:
# 导入必要的库
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score, precision_score, recall_score, f1_score
from sklearn.preprocessing import StandardScaler
# 第一步:加载数据
data = pd.read_csv('Concrete_Data_Pro.csv') # 假设数据文件名为 concrete_data.csv
# 查看前6条数据
print("前6条数据:\n", data.head(6))
# 统计信息
print("数据统计信息:\n", data.describe())
# 第二步:对目标值进行离散化
# 示例:离散为3级
bins = [0, 20, 40, 100] # 自定义离散化区间
labels = [0, 1, 2] # 自定义标签
data['Strength_Level'] = pd.cut(data['Concrete compressive strength'], bins=bins, labels=labels)
print("离散化后的数据:\n", data[['Concrete compressive strength', 'Strength_Level']].head())
# 第三步:可视化特征关系
sns.pairplot(data.iloc[:, :-2]) # 可视化前8个特征之间的关系
plt.show()
# 热力图显示特征相关性
plt.figure(figsize=(10, 8))
sns.heatmap(data.iloc[:, :-2].corr(), annot=True, cmap='coolwarm')
plt.title("Features Correlation Matrix")
plt.show()
# 第四步:数据预处理
X = data.iloc[:, :-2] # 输入特征
y = data['Strength_Level'] # 目标值
# 归一化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# 选择模型并拟合
rf_model = RandomForestClassifier(random_state=42)
rf_model.fit(X_train, y_train)
# 预测
y_pred = rf_model.predict(X_test)
# 模型评估
print("模型精度:", accuracy_score(y_test, y_pred))
print("分类报告:\n", classification_report(y_test, y_pred))
# 第五步:交叉验证和超参数优化
param_grid = {
'n_estimators': [50, 100, 150],
'max_depth': [None, 10, 20, 30],
'min_samples_split': [2, 5, 10]
}
grid_search = GridSearchCV(rf_model, param_grid, cv=5, scoring='accuracy', verbose=1)
grid_search.fit(X_train, y_train)
print("最佳参数:", grid_search.best_params_)
print("最佳交叉验证得分:", grid_search.best_score_)
# 第六步:结果分析与可视化
# 混淆矩阵
cm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(6, 5))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=labels, yticklabels=labels)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()
# 输出精度、查准率、查全率、F1值
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted')
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')
print(f"精度: {accuracy:.2f}")
print(f"查准率: {precision:.2f}")
print(f"查全率: {recall:.2f}")
print(f"F1值: {f1:.2f}")
- 数据统计信息展示
设计思路:
导入数据,返回描述性统计信息,展示前 6 行,并解释数据集的基本特点。
实现步骤:
统计数据:使用 data.describe() 返回数值型变量的统计信息。
数据展示:用 data.head() 展示前 6 行。
数据描述:分析数据分布(如均值、标准差)和潜在的数据规律。
代码:
- 数据可视化
设计思路:
绘制特征之间的关系图(如散点图矩阵或相关性热图)。
实现步骤:
相关性分析:使用 data.corr() 计算相关性矩阵。
绘制热图:使用 seaborn.heatmap() 可视化相关性。
散点矩阵:用 sns.pairplot() 展示特征间关系。
代码:
图片:
- 数据预处理与建模
设计思路:
对数据进行清洗和预处理,划分训练集与测试集后,选用机器学习算法(如随机森林、XGBoost)进行分类任务。
实现步骤:
数据清洗:检查缺失值、异常值等。
特征归一化:用 MinMaxScaler 或 StandardScaler 对特征进行归一化处理。
划分数据集:用 train_test_split() 将数据分为训练集和测试集。
训练模型:选择随机森林或其他模型,训练并测试。
代码:
- 超参数调优
设计思路:
采用交叉验证和网格搜索,优化超参数(如 n_estimators、max_depth)。
实现步骤:
定义参数网格:设定参数范围。
交叉验证:使用 GridSearchCV 或 RandomizedSearchCV 对超参数进行调优。
分析影响:通过模型评估指标,分析不同超参数对结果的影响。 代码:
- 预测结果分析与可视化
设计思路:
分析模型预测结果,计算混淆矩阵,绘制热图并解释不同等级混凝土的查准率与查全率。
实现步骤:
混淆矩阵:用 confusion_matrix 计算预测结果。
可视化混淆矩阵:用 sns.heatmap() 绘制混淆矩阵热图。
分类报告:生成分类报告,查看各等级的查准率和查全率。
代码:
|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
2023-12-13 12.13每日总结