A9.玻璃制品的成分分析与鉴别-分析与讨论
1. 玻璃制品的成分分析与鉴别2.1 基本分析:分类问题+聚类问题+预测问题2.2 聚类问题参考例程2.3 分类问题参考例程3. 参考文献
·
1. 更新讨论
讨论只能点到为止。愿意思考的同学,可以琢磨一下。没有看懂的同学,就当我无知乱说好了。
1.1 题目读几遍都不多
1. “空白处表示未检测到该成分”
未检测到该成分,能否理解为不含该成分,即含量为 0?
2. “各成分的累加之和应为 100%,但可能导致成分比例累加和非 100%”
如果成分比例累加和非 100%,是否需要进行归一化处理?
3. “将成分比例累加和介入 85~105%之间的数据视为有效数据”
有没有在此区间之外的数据,如何处理?
4. “对表面风化与玻璃类型,纹饰和颜色的关系进行分析”
- 逐一分析,还是综合分析?
- 如果综合分析,其中有些行的颜色数据缺失,如何处理?
5. “根据风化点检测数据,预测风化前化学成分含量”
- 初看无从着手,其实有很多方法,当然都要做一定的假设。
- 采用什么方法,如何假设,取决于读者,但假设要相对合理。
6. “分析高钾、铅钡的分类规律。”
- 其实不用建模都能说清楚,当初分类时显然不是通过数学建模,而是人为总结规律进行分类的
- 这是比较简单的二分类问题,所有数据往模型里一装就能得到结果。但是,这样做合理吗?
7. “亚类划分,对合理性和敏感性进行分析”
- 分几类,如何分类?这是分类问题,还是聚类问题?真的吗?
- 亚类划分的合理性,有标准答案吗?中国古代分几个阶段?
- 亚类划分的敏感性,这是指什么?用什么指标来反映敏感性?
- 按照数学建模方法,基于合理性和敏感性划分的亚类,真的科学合理吗?此问跑题了。
先聊到这里,有兴趣的同学,点赞收藏,我今晚或明天可以再更新一下。
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. 评阅要点
更多推荐
已为社区贡献4条内容
所有评论(0)