当前位置: 首页 > news >正文

UCI 玻璃数据集多分类实战:Pandas 1.5 + Matplotlib 3.8 可视化与 9 个化学属性分析

UCI 玻璃数据集多分类实战:从化学属性到类型预测的完整分析流程

玻璃在我们日常生活中无处不在,从建筑窗户到手机屏幕,不同类型的玻璃具有截然不同的物理和化学特性。如何通过实验室测量数据准确判断一块玻璃碎片的来源?这正是UCI玻璃数据集要解决的有趣问题。本文将带您完整走通这个经典多分类问题的分析流程,从数据清洗到可视化,再到特征工程与模型构建。

1. 数据集概览与预处理

UCI玻璃数据集包含214个样本,每个样本记录了9种化学成分的含量比例以及折射率(RI),目标变量是玻璃类型(共7类)。这些数据源自刑事调查场景,通过分析犯罪现场遗留的玻璃碎片化学成分,可追溯其来源(如车窗、容器等)。

首先加载并检查数据:

import pandas as pd url = "https://archive.ics.uci.edu/ml/machine-learning-databases/glass/glass.data" cols = ['Id','RI','Na','Mg','Al','Si','K','Ca','Ba','Fe','Type'] glass = pd.read_csv(url, header=None, names=cols)

查看数据摘要统计:

print(glass.describe().T[['mean','std','min','max']])

输出显示各特征量纲差异显著(如Ca含量均值为8.96,而Fe仅0.057),需要进行标准化处理:

from sklearn.preprocessing import StandardScaler features = glass.iloc[:,1:-1] scaler = StandardScaler() scaled_features = scaler.fit_transform(features)

2. 探索性数据分析(EDA)

2.1 化学成分分布对比

使用箱线图观察各成分在不同玻璃类型中的分布差异:

import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(12,8)) sns.boxplot(data=glass.melt(id_vars='Type'), x='variable', y='value', hue='Type') plt.xticks(rotation=45) plt.title('Chemical Composition Distribution by Glass Type') plt.show()

关键发现:

  • Mg含量:建筑窗户玻璃(类型1/2)显著高于车辆玻璃(类型3)
  • Ba含量:仅在某些特殊玻璃类型(如类型7)中出现
  • Fe含量:建筑平板玻璃(类型1)普遍高于其他类型

2.2 特征相关性分析

生成热力图观察特征间相关性:

corr_matrix = glass.iloc[:,1:-1].corr() plt.figure(figsize=(10,8)) sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0) plt.title('Feature Correlation Heatmap') plt.show()

显著相关性包括:

  • RI与Ca:强正相关(0.81)
  • Mg与Al:负相关(-0.48)
  • Na与Ba:正相关(0.33)

提示:高相关性特征可考虑在建模时进行降维处理

3. 高级可视化技术

3.1 平行坐标图

平行坐标图能直观展示多维特征与类别的关系:

from pandas.plotting import parallel_coordinates plt.figure(figsize=(12,8)) parallel_coordinates(glass.iloc[:,1:], 'Type', colormap='viridis', alpha=0.5) plt.title('Parallel Coordinates Plot') plt.xticks(rotation=45) plt.grid(alpha=0.3) plt.show()

该图清晰显示:

  • 类型1和2在Mg、Ca维度有明显区分
  • 类型5和6在Ba维度有独特分布
  • 类型3在多个维度上与其他类型重叠

3.2 t-SNE降维可视化

使用t-SNE将高维数据降至2D空间:

from sklearn.manifold import TSNE tsne = TSNE(n_components=2, random_state=42) tsne_results = tsne.fit_transform(scaled_features) plt.figure(figsize=(10,8)) sns.scatterplot(x=tsne_results[:,0], y=tsne_results[:,1], hue=glass['Type'], palette='viridis', s=100) plt.title('t-SNE Visualization of Glass Types') plt.show()

结果显示类型3和5存在明显重叠,预示这些类别可能更难区分。

4. 特征工程与建模

4.1 特征重要性分析

使用随机森林评估特征重要性:

from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(n_estimators=500, random_state=42) rf.fit(scaled_features, glass['Type']) importance = pd.DataFrame({ 'Feature': features.columns, 'Importance': rf.feature_importances_ }).sort_values('Importance', ascending=False)

重要性排序:

  1. Mg (0.23)
  2. RI (0.18)
  3. Al (0.15)
  4. Ba (0.12)
  5. Ca (0.10)

4.2 构建分类模型

比较三种主流算法的表现:

from sklearn.model_selection import cross_val_score from sklearn.svm import SVC from sklearn.ensemble import GradientBoostingClassifier models = { 'Random Forest': RandomForestClassifier(n_estimators=300), 'SVM': SVC(kernel='rbf', C=10, gamma=0.1), 'Gradient Boosting': GradientBoostingClassifier(n_estimators=200) } results = {} for name, model in models.items(): scores = cross_val_score(model, scaled_features, glass['Type'], cv=5) results[name] = scores.mean() print(pd.DataFrame.from_dict(results, orient='index', columns=['Accuracy']))

模型表现对比:

模型准确率
Random Forest0.72
SVM0.68
Gradient Boosting0.75

4.3 类别不平衡处理

数据集存在明显类别不平衡(类型1有70个样本,类型6仅9个),采用SMOTE过采样:

from imblearn.over_sampling import SMOTE smote = SMOTE(random_state=42) X_res, y_res = smote.fit_resample(scaled_features, glass['Type']) gb = GradientBoostingClassifier(n_estimators=200) scores = cross_val_score(gb, X_res, y_res, cv=5) print(f"Accuracy after SMOTE: {scores.mean():.2f}")

处理后准确率提升至0.81,特别是对小类别的识别率显著改善。

5. 模型解释与业务应用

5.1 SHAP值分析

解释模型预测的依据:

import shap explainer = shap.TreeExplainer(rf) shap_values = explainer.shap_values(scaled_features) plt.figure(figsize=(12,8)) shap.summary_plot(shap_values, scaled_features, feature_names=features.columns, class_names=glass['Type'].unique()) plt.show()

分析显示:

  • 高Mg值对预测为建筑窗户玻璃(类型1/2)有显著贡献
  • Ba含量是识别特殊玻璃类型(类型7)的关键指标
  • 低Al值有助于识别车辆玻璃(类型3)

5.2 实际应用建议

基于分析结果,建议法证实验室:

  1. 优先检测指标:Mg、Ba、RI、Al
  2. 检测流程优化
    • 先测Mg含量快速区分建筑与车辆玻璃
    • 对含Ba样本进行二次验证
  3. 设备配置
    • 确保折射率测量精度达±0.0001
    • 微量元素检测需达到ppm级灵敏度

典型判断流程:

graph TD A[开始检测] --> B{Mg > 3.5%?} B -->|是| C[可能为建筑玻璃] B -->|否| D[检测Ba含量] D --> E{Ba > 0.1%?} E -->|是| F[特殊玻璃类型] E -->|否| G[车辆或容器玻璃]

6. 分析流程优化与扩展

6.1 自动化分析流水线

构建可复用的分析管道:

from sklearn.pipeline import Pipeline from sklearn.compose import ColumnTransformer preprocessor = ColumnTransformer( transformers=[('scaler', StandardScaler(), features.columns)]) pipeline = Pipeline([ ('preprocessor', preprocessor), ('smote', SMOTE(random_state=42)), ('classifier', GradientBoostingClassifier(n_estimators=200)) ]) # 保存模型供后续使用 import joblib joblib.dump(pipeline, 'glass_classifier.pkl')

6.2 新数据预测示例

加载新样本进行预测:

new_samples = pd.DataFrame({ 'RI': [1.520, 1.525], 'Na': [13.5, 12.8], 'Mg': [3.8, 0.5], 'Al': [1.2, 1.8], 'Si': [72.5, 73.0], 'K': [0.5, 0.3], 'Ca': [8.5, 9.2], 'Ba': [0.0, 0.2], 'Fe': [0.1, 0.05] }) pipeline = joblib.load('glass_classifier.pkl') predictions = pipeline.predict(new_samples) print(f"Predicted types: {predictions}")

6.3 持续改进方向

  1. 数据增强:通过实验室实验补充稀有类别样本
  2. 特征扩展:考虑添加元素比值特征(如Ca/Mg)
  3. 模型优化:尝试深度学习模型处理非线性关系
  4. 部署方案:开发Web应用接口供实验室使用

在实际项目中,我们发现Mg含量与Al含量的比值对区分类型3和5特别有效,这提示我们化学元素间的比例关系可能比绝对含量更具判别力。

http://www.jsqmd.com/news/1128136/

相关文章:

  • 差分进化(DE)算法实战指南丨从原理到MATLAB代码实现
  • ICM-42688-P与STM32F207VGT6在工业自动化中的黄金组合应用
  • Python数据分析与可视化实战:从基础到商业应用
  • Slurm 调度 MATLAB R2023b 多节点并行:40核 parfor 任务实战与性能分析
  • WireMock与MockServer对比:API模拟工具选型指南
  • 如何快速掌握HunterPie:新手玩家的完整怪物猎人世界数据覆盖工具指南
  • ONNX模型推理性能优化实战指南
  • 【实战指南】利用华为MindSpore与MNIST数据集,从零构建你的首个手写数字识别模型
  • Spark MLlib ALS 实战:隐式反馈数据下的矩阵分解推荐系统构建
  • 从零到一:使用Labelme高效构建图像分割数据集
  • Faster R-CNN PyTorch 1.2 自定义数据集训练:VOC格式 20 类 mAP 80.36% 实战
  • 高效批量删除文档星号的7种方法
  • DXVK 3.0深度解析:Linux游戏性能突破40%的Direct3D转Vulkan技术实战指南
  • Si4731芯片与PIC18F86J16在便携式收音机设计中的应用
  • 机器学习项目全流程:从业务理解到模型部署
  • 神经网络架构全解析:CNN、RNN、GNN、GAN与Transformer的核心原理与应用场景
  • Burp Suite入门指南:从零配置到实战漏洞测试
  • 3步掌握PUBG鼠标宏:罗技Lua脚本的输入模拟与游戏自动化技术解析
  • 从混淆矩阵到AUC:5步代码实战绘制ROC与PR曲线对比
  • Apriori算法 Python 3.11 实战:从0到1实现超市购物篮分析,支持度/置信度调优
  • 量化与内存优化:让百亿大模型在GTX1060上流畅推理
  • Linux ACL 权限实战:从基础配置到高级继承策略(含默认权限详解)
  • Matlab深度学习——从零构建CNN实战
  • 数据分析可视化:从洞见到专业图表的实战技巧
  • PUBG后坐力控制算法深度解析:Lua脚本实现与模块化架构设计
  • Py之toad:从零构建金融风控评分卡的toad实战指南
  • Python量化交易实战:从数据获取到策略回测的完整工作流
  • TensorFlow智能图像分类系统实战指南
  • NumPy einsum 张量网络计算实战:4个张量缩并顺序优化,复杂度从 O(d^7) 降至 O(d^5)
  • 时间序列预测:滑动窗口转换3步构建监督学习数据集(Python实战)