A9.2022年全国数学建模竞赛 C题-玻璃制品的成分分析与鉴别-赛题分析与讨论

玻璃制品的成分分析与鉴别-分析与讨论

文章目录

  • 玻璃制品的成分分析与鉴别-分析与讨论
  • 1. 2022年C题(玻璃制品的成分分析与鉴别)
  • 2. 算法讨论
  • 2.1 基本分析:分类问题+聚类问题+预测问题
  • 2.2 聚类问题参考例程—只供参考,非赛题解答
  • Kmeans 聚类例程:
  • 2.3 分类问题参考例程—只供参考,非赛题解答
  • 分类问题 Python 例程1:LinearSVC 使用例程
  • 分类问题 Python 例程2:NuSVC 使用例程
  • 3. 参考文献
  • [1]李沫. 战国秦汉时期费昂斯制品的制备及铅钡玻璃研究[D].北京化工大学,2014.
  • [2]胡志中,李佩,蒋璐蔓,王通洋,杜谷,杨波.古代玻璃材料LA-ICP-MS组分分析及产源研究[J].岩矿测试,2020,39(04):505-514
  • [3]张丽艳,李洪,陈树彬,李忠镝,阮苠秩,薛天锋,钱敏,凡思军.玻璃的成分和性质的模拟方法[J].硅酸盐学报,2022,50(08):2338-2350.
  • 1. 2022年C题(玻璃制品的成分分析与鉴别)

    C题 古代玻璃制品的成分分析与鉴别

    附件表单1给出了这些文物的分类信息,附件表单2给出了相应的主要成分所占比例。
    请你们团队依据附件中的相关数进行分析建模,解决以下问题:
    问题1 对这些玻璃文物,依据附件数分析高钾玻璃、铅钡的类规律,预测其风化前的化学成分含量;
    问题2 依据附件数分析高钾玻璃、铅钡的类规律;对于每个别选择合适的化学成分对其进行亚类划分,给出具体的划分方法及划分结果
    问题3 对附件表单中未知类别玻璃文物的化学成分进行析,鉴其所属类型

    2. 算法讨论

    2.1 基本分析:分类问题+聚类问题+预测问题

    2.2 聚类问题参考例程—只供参考,非赛题解答

    Python数模笔记-Sklearn(2)聚类分析 Python数模笔记-Sklearn (2)聚类分析

    Kmeans 聚类例程:

    
    # Kmeans_sklearn_v1d.py
    # K-Means cluster by scikit-learn for problem "education2015"
    # v1.0d: K-Means 聚类算法(SKlearn)求解:各地区高等教育发展状况-2015 问题
    # 日期:2021-05-10
    
    #  -*- coding: utf-8 -*-
    import numpy as np
    import pandas as pd
    from sklearn.cluster import KMeans, MiniBatchKMeans
    
    # 主程序 = 关注 Youcans,分享原创系列 https://blog.csdn.net/youcans =
    def main():
        # 读取数据文件
        readPath = "../data/education2015.xlsx"  # 数据文件的地址和文件名
        dfFile = pd.read_excel(readPath, header=0)  # 首行为标题行
        dfFile = dfFile.dropna()  # 删除含有缺失值的数据
        # print(dfFile.dtypes)  # 查看 df 各列的数据类型
        # print(dfFile.shape)  # 查看 df 的行数和列数
        print(dfFile.head())
    
        # 数据准备
        z_scaler = lambda x:(x-np.mean(x))/np.std(x)  # 定义数据标准化函数
        dfScaler = dfFile[['x1','x2','x3','x4','x5','x6','x7','x8','x9','x10']].apply(z_scaler)  # 数据归一化
        dfData = pd.concat([dfFile[['地区']], dfScaler], axis=1)  # 列级别合并
        df = dfData.loc[:,['x1','x2','x3','x4','x5','x6','x7','x8','x9','x10']]  # 基于全部 10个特征聚类分析
        # df = dfData.loc[:,['x1','x2','x7','x8','x9','x10']]  # 降维后选取 6个特征聚类分析
        X = np.array(df)  # 准备 sklearn.cluster.KMeans 模型数据
        print("Shape of cluster data:", X.shape)
    
        # KMeans 聚类分析(sklearn.cluster.KMeans)
        nCluster = 4
        kmCluster = KMeans(n_clusters=nCluster).fit(X)  # 建立模型并进行聚类,设定 K=2
        print("Cluster centers:\n", kmCluster.cluster_centers_)  # 返回每个聚类中心的坐标
        print("Cluster results:\n", kmCluster.labels_)  # 返回样本集的分类结果
    
        # 整理聚类结果
        listName = dfData['地区'].tolist()  # 将 dfData 的首列 '地区' 转换为 listName
        dictCluster = dict(zip(listName,kmCluster.labels_))  # 将 listName 与聚类结果关联,组成字典
        listCluster = [[] for k in range(nCluster)]
        for v in range(0, len(dictCluster)):
            k = list(dictCluster.values())[v]  # 第v个城市的分类是 k
            listCluster[k].append(list(dictCluster.keys())[v])  # 将第v个城市添加到 第k类
        print("\n聚类分析结果(分为{}类):".format(nCluster))  # 返回样本集的分类结果
        for k in range(nCluster):
            print("第 {} 类:{}".format(k, listCluster[k]))  # 显示第 k 类的结果
    
        return
    # = 关注 Youcans,分享原创系列 https://blog.csdn.net/youcans =
    if __name__ == '__main__':
        main()
    
    

    2.3 分类问题参考例程—只供参考,非赛题解答

    Python数模笔记-Sklearn(5)支持向量机 Python数模笔记-Sklearn (5)支持向量机

    说明:支持向量机也可以用于多分类问题。

    分类问题 Python 例程1:LinearSVC 使用例程

    # skl_SVM_v1a.py
    # Demo of linear SVM by scikit-learn
    # v1.0a: 线性可分支持向量机模型(SciKitLearn)
    # Copyright 2021 YouCans, XUPT
    # Crated:2021-05-15
    
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.svm import SVC, LinearSVC
    from sklearn.datasets import make_blobs
    
    X, y = make_blobs(n_samples=40, centers=2, random_state=27)  # 产生数据集: 40个样本, 2类
    modelSVM = SVC(kernel='linear', C=100)  # SVC 建模:使用 SVC类,线性核函数
    # modelSVM = LinearSVC(C=100)  # SVC 建模:使用 LinearSVC类,运行结果同上
    modelSVM.fit(X, y)  # 用样本集 X,y 训练 SVM 模型
    
    print("\nSVM model: Y = w0 + w1*x1 + w2*x2") # 分类超平面模型
    print('截距: w0={}'.format(modelSVM.intercept_))  # w0: 截距, YouCans
    print('系数: w1={}'.format(modelSVM.coef_))  # w1,w2: 系数, XUPT
    print('分类准确度:{:.4f}'.format(modelSVM.score(X, y)))  # 对训练集的分类准确度
    
    # 绘制分割超平面和样本集分类结果
    plt.scatter(X[:,0], X[:,1], c=y, s=30, cmap=plt.cm.Paired)  # 散点图,根据 y值设置不同颜色
    ax = plt.gca()  # 移动坐标轴
    xlim = ax.get_xlim()  # 获得Axes的 x坐标范围
    ylim = ax.get_ylim()  # 获得Axes的 y坐标范围
    xx = np.linspace(xlim[0], xlim[1], 30)  # 创建等差数列,从 start 到 stop,共 num 个
    yy = np.linspace(ylim[0], ylim[1], 30)  #
    YY, XX = np.meshgrid(yy, xx)  # 生成网格点坐标矩阵 XUPT
    xy = np.vstack([XX.ravel(), YY.ravel()]).T  # 将网格矩阵展平后重构为数组
    Z = modelSVM.decision_function(xy).reshape(XX.shape)
    ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,
               linestyles=['--', '-', '--'])  # 绘制决策边界和分隔
    ax.scatter(modelSVM.support_vectors_[:, 0], modelSVM.support_vectors_[:, 1], s=100,
               linewidth=1, facecolors='none', edgecolors='k')  # 绘制 支持向量
    plt.title("Classification by LinearSVM (youcans, XUPT)")
    plt.show()
    # = 关注 Youcans,分享原创系列 https://blog.csdn.net/youcans =
    

    分类问题 Python 例程2:NuSVC 使用例程

    # skl_SVM_v1b.py
    # Demo of nonlinear SVM by scikit-learn
    # v1.0b: 线性可分支持向量机模型(SciKitLearn)
    # Copyright 2021 YouCans, XUPT
    # Crated:2021-05-15
    
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.svm import SVC, NuSVC, LinearSVC
    from sklearn.datasets import make_moons
    
    # 数据准备:生成训练数据集,生成等高线网格数据
    X, y = make_moons(n_samples=100, noise=0.1, random_state=27) # 生成数据集
    x0s = np.linspace(-1.5, 2.5, 100)  # 创建等差数列,从 start 到 stop,共 num 个
    x1s = np.linspace(-1.0, 1.5, 100)  # start, stop 根据 Moon 数据范围选择确定
    x0, x1 = np.meshgrid(x0s, x1s)  # 生成网格点坐标矩阵
    Xtest = np.c_[x0.ravel(), x1.ravel()]  # 返回展平的一维数组
    # SVC 建模,训练和输出
    modelSVM1 = SVC(kernel='poly', degree=3, coef0=0.2)  # 'poly' 多项式核函数
    modelSVM1.fit(X, y)  # 用样本集 X,y 训练支持向量机 1
    yPred1 = modelSVM1.predict(Xtest).reshape(x0.shape)  # 用模型 1 预测分类结果
    # NuSVC 建模,训练和输出
    modelSVM2 = NuSVC(kernel='rbf', gamma='scale', nu=0.1)  #'rbf' 高斯核函数
    modelSVM2.fit(X, y)  # 用样本集 X,y 训练支持向量机 2
    yPred2 = modelSVM2.predict(Xtest).reshape(x0.shape)  # 用模型 2 预测分类结果
    
    fig, ax = plt.subplots(figsize=(8, 6))  
    ax.contourf(x0, x1, yPred1, cmap=plt.cm.brg, alpha=0.1) # 绘制模型1 分类结果
    ax.contourf(x0, x1, yPred2, cmap='PuBuGn_r', alpha=0.1) # 绘制模型2 分类结果
    ax.plot(X[:,0][y==0], X[:,1][y==0], "bo")  # 按分类绘制数据样本点
    ax.plot(X[:,0][y==1], X[:,1][y==1], "r^")  # XUPT
    ax.grid(True, which='both')
    ax.set_title("Classification of moon data by LinearSVM")
    plt.show()
    # = 关注 Youcans,分享原创系列 https://blog.csdn.net/youcans =
    

    3. 参考文献

    [1]李沫. 战国秦汉时期费昂斯制品的制备及铅钡玻璃研究[D].北京化工大学,2014.

    摘要:费昂斯制品被学者称为是原始玻璃的雏形,我国战国至秦汉时期十分常见的蓝紫色八棱柱状费昂斯制品更以其独特的铅钡成分和特殊的风化形貌受到国内外学者的广泛关注。本文从该类器物的显色成分中国紫(Chinese Purple, BaCuSi2O6)和中国蓝(Chinese Blue, BaCuSi4O10)的合成反应入手,层层深入,结合古代样品分析,最终在实验室条件下模拟成型工艺过程并得到与原始费昂斯文物较为相似的产物。主要研究内容和结果如下: 1.合成了中国紫和中国蓝颜料,研究了合成方法、钡源及含铅催化剂对硅酸铜钡颜料合成反应的影响。通过对产物的XRD分析及显微结构研究,得出了高温固相法更适宜作为模拟实验的反应方法,以BaCO3为钡源的配方更易在实验室条件下获得较为纯净的产物。通过SEM、TG (DTG)、XRD研究,得出PbCO3催化剂比PbO和PbS可有效降低合成反应温度,在600-700℃范围内可使BaCO3分解,从而合成出较为纯正的中国紫颜料。 2.对两件风化严重的蓝紫色费昂斯八棱柱状物分别进行了SEM+EDX测试和拉曼光谱研究,发现由不同检测方法得到了相同的结果,即外部结壳的主要成分均为SiO2,PbCO3,Al2O3及钡盐(BaCO3或BaSO4),而内部风化层中主要显色成分均为中国紫。 3.对中国战国秦汉时期蓝色费昂斯料珠的加工成型过程进行了初步实验室模拟试验采用XRF对古代蓝紫色费昂斯制品进行了化学成分研究,获得了模拟料珠的实验配方。对经过手工成型后的模拟产物进行XRD、显微分析,并与古代料珠进行宏观和显微结构比较后,确定其为与古代产物相似程度较高的模拟产物。 4.对八棱柱状费昂斯制品模拟成型过程中涉及的铅盐含量与烧制温度,烧结次数,成型压力,成型方法等因素进行了研究。通过模拟样品与文物样品密度、孔隙率的比较得出铅含量严重影响着费昂斯制品的成品状态,常见的高铅含量费昂斯制品,最高反应温度一般不会超过950℃(铅盐含量>35wt%)。蓝紫色八棱柱状费昂斯制品的原料粉末应为二次烧结粉末,成型过程中的压力参数应在1500-2000psi(10.34-13.79MPa)范围内,采用的成型方法应为先成型(柱状)后打磨的方法,最终获得了与古代样品十分形似的模拟产物。 5.分析研究了两件中国古代秦汉时期绿色八棱柱状铅钡玻璃样品中的针状物质,对其进行成分EDX和形貌SEM分析及拉曼光谱测试后,根据EDX分析结果及实验室合成物质的XRD、拉曼光谱比对,确定古代样品中该针状物的组成应为BaSiO3、PbSiO3及Al2O3。

    [2]胡志中,李佩,蒋璐蔓,王通洋,杜谷,杨波.古代玻璃材料LA-ICP-MS组分分析及产源研究[J].岩矿测试,2020,39(04):505-514

    摘要:古代玻璃及玻璃质材料的定量分析对于研究其制作年代及产地、原料的来源以及制作工艺有着重要的参考意义。与电子探针(EMPA)、能谱扫描-电子显微镜(EDX-SEM)等分析方法相比,LA-ICP-MS能够快速且准确地提供样品主次量及微量元素信息。本文对LA-ICP-MS古代玻璃元素定量分析中的影响因素进行研究认为:在193nm激光下玻璃标准NIST610和康宁玻璃标准之间基体差异造成的影响较小,而采用玻璃标准NIST610为外标结合基体归一化法的校正策略测定康宁标准结果表明,该策略能够准确反映不同类型古代玻璃材料中成分组成;实验中不同剥蚀模式的研究,有助于不同实验条件的建立,从而满足不同研究的需要。本次研究对出土样品进行了分析,为该制品的产源研究提供了数据支持。

    [3]张丽艳,李洪,陈树彬,李忠镝,阮苠秩,薛天锋,钱敏,凡思军.玻璃的成分和性质的模拟方法[J].硅酸盐学报,2022,50(08):2338-2350.

    摘要:介绍了加和法、相图法、Priven法、拓扑束缚理论、分子动力学模拟、机器学习及数理统计模拟等7种玻璃成分性质模拟方法,总结了各模拟方法的主要理论依据、模拟过程及应用现状。加和法可进行多种玻璃物理性质的预测,相图法在二、三、四元硅酸盐、硼酸盐及硼硅酸盐玻璃体系上的运用较为成熟,Priven法结合了玻璃结构、热力学方程及计算机模拟,拓扑束缚理论目前应用于氧化物和硫化物体系个别性质的模拟,分子动力学模拟亦应用于多种玻璃体系中的分子结构分析和相关性质预测,机器学习能充分利用文献中提供的大量数据来模拟复杂玻璃性质。目前数理统计模拟法已用在建立复杂玻璃体系中的成分(C)–结构(S)–性质(P)的相关数学模型,包括硅酸盐,硼硅酸盐和磷酸盐玻璃。较传统的C–P统计模拟方法,C–S–P统计模拟法能对复杂玻璃体系提供更精准的性质评估,有助于新型玻璃开发。

    物联沃分享整理
    物联沃-IOTWORD物联网 » A9.2022年全国数学建模竞赛 C题-玻璃制品的成分分析与鉴别-赛题分析与讨论

    发表评论