预测分析的设计思路:
数据加载 -> 数据预处理 -> 离散化方案设计 -> 特征选择 -> 数据标准化
↓
离散化结果对比 (qcut, 等距分箱, 自定义分箱)
↓
随机森林模型训练 -> 测试集评估 -> 指标对比
↓
选定最优离散化方式并总结优化
数据加载:
从原始数据文件中加载混凝土承重强度相关的数据集,确保数据能够正确读取。针对每个变量进行初步检查,包括数据类型、分布特点、是否存在缺失值或异常值。
数据预处理:
在数据加载完成后,清洗数据并对目标变量(承重强度)进行离散化处理。同时,对特征变量进行筛选和处理,剔除与承重强度无关的变量,保留对预测承重强度有影响的变量,为后续分析提供干净、规范的数据集。
离散化方案设计:
根据目标变量(承重强度)的分布情况和业务需求,设计三种不同的离散化方案:
qcut 等频分箱:按照样本数量等分,使每个类别中的样本数大致相等,适合数据分布不均匀的情况。
等距分箱:根据承重强度值范围的最小值和最大值,均匀划分为若干个区间,适合数据分布较均匀的情况。
自定义分箱:基于实际业务需求或领域知识设定阈值,例如根据行业标准手动划分低、中、高强度。
特征选择与数据标准化:
从数据集中选出有价值的特征作为模型输入,将其转化为统一的数值表示。接着对特征进行标准化(如 Z-score 标准化),确保不同特征的量纲一致,避免特征间的尺度差异对模型训练造成干扰。
离散化结果对比:
针对每种离散化方式,分别对数据集进行划分(如训练集和测试集),并在相同条件下进行模型训练和测试。通过评价指标(如精度、查准率、查全率、F1 值等)对不同离散化方式的结果进行全面比较。
模型训练与评估:
采用随机森林分类器对不同离散化方式生成的数据集进行模型训练,通过测试集评估模型性能。生成混淆矩阵、分类报告,并记录各项指标的得分。
选定最优离散化方式并总结优化:
根据评价指标(特别是 F1 值)选出预测性能最好的离散化方式,作为最终推荐方案。总结分析最优方案的优点和适用场景,同时提供优化建议,如是否可以尝试其他特征工程、模型调参或更高级的模型。
实现步骤:
1. 离散化承重强度
将连续的承重强度(Concrete compressive strength)离散化为不同的承重等级。可以通过以下步骤来完成:
调研文献:根据工程标准或文献资料,确定不同承重强度对应的等级区间。比如,承重强度在20-30 MPa的为等级1,30-40 MPa为等级2,依此类推。
离散化方法:可以使用固定的区间或基于统计分析(如均值、标准差等)将承重强度划分为多个等级。例如,利用pandas.cut()函数进行区间划分。
2. 导入数据集并返回统计信息
可以使用pandas加载数据并查看统计信息,示例如下:
import pandas as pd
# 加载数据
data = pd.read_csv('concrete_data.csv')
# 输出前6行
print(data.head())
# 统计描述
print(data.describe())
data.describe()会输出每一列的统计信息,包括均值、标准差、最大最小值等,可以帮助我们理解数据的分布。
3. 数据可视化
使用seaborn或matplotlib生成特征关系的矩阵图。可以使用pairplot()来显示特征之间的关系,或heatmap()来显示特征之间的相关性:
import seaborn as sns
import matplotlib.pyplot as plt
# 相关性矩阵
corr_matrix = data.corr()
# 可视化
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.show()
# 特征关系矩阵
sns.pairplot(data)
plt.show()
4. 数据预处理
处理缺失值:若数据集有缺失值,可以使用均值、中位数等填充方法进行处理,或者删除含有缺失值的样本。
标准化:由于不同特征的量纲不同,进行数据标准化(如Z-score标准化)会有助于模型的训练。
划分训练集和测试集:使用train_test_split进行数据集划分:
from sklearn.model_selection import train_test_split
# 划分数据集,80%训练,20%测试
X = data.drop('Concrete compressive strength', axis=1)
y = data['Concrete compressive strength']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
5. 选用机器学习算法进行拟合
使用随机森林进行分类:
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
# 初始化模型
model = RandomForestClassifier()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 输出评估报告
print(classification_report(y_test, y_pred))
6. 交叉验证和超参数调优
使用GridSearchCV进行超参数调优,并进行交叉验证:
from sklearn.model_selection import GridSearchCV
# 超参数范围
param_grid = {'n_estimators': [100, 200], 'max_depth': [10, 20, None]}
# 网格搜索
grid_search = GridSearchCV(estimator=RandomForestClassifier(), param_grid=param_grid, cv=5)
grid_search.fit(X_train, y_train)
# 输出最优超参数
print(grid_search.best_params_)
# 使用最优参数进行预测
best_model = grid_search.best_estimator_
y_pred_best = best_model.predict(X_test)
# 输出评估报告
print(classification_report(y_test, y_pred_best))
7. 预测结果分析及可视化
可以使用confusion_matrix来可视化混淆矩阵,分析不同承重等级的查准率(Precision)、查全率(Recall)和F1值:
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
# 混淆矩阵
cm = confusion_matrix(y_test, y_pred_best)
disp = ConfusionMatrixDisplay(confusion_matrix=cm)
disp.plot(cmap='Blues')
plt.show()
|