您的位置:首页 > 文旅 > 旅游 > 2022高教社杯全国大学生数学建模竞赛C题 问题二(2) Python代码

2022高教社杯全国大学生数学建模竞赛C题 问题二(2) Python代码

2024/12/23 3:16:40 来源:https://blog.csdn.net/weixin_45481473/article/details/142318056  浏览:    关键词:2022高教社杯全国大学生数学建模竞赛C题 问题二(2) Python代码

目录

      • 2.2 对于每个类别选择合适的化学成分对其进行亚类划分,给出具体的划分方法及划分结果,并对分类结果的合理性和敏感性进行分析。
        • 无监督变量筛选(聚类前筛选化学成分)
          • 方差过滤法
          • 拉普拉斯分数
        • 聚类
          • K-means聚类
          • 层次聚类
          • 高斯混合模型 GMM
          • Leiden莱顿聚类
          • Affinity Propagation 亲和力传播
          • Agglomerative Clustering 聚集聚类
          • BIRCH聚类
          • OPTICS 聚类
          • 谱聚类 Spectral Clustering
        • 有监督变量筛选(聚类后筛选化学成分)
          • 随机森林度量特征重要性
          • 单变量特征选择 -- F 检验
          • 递归特征消除RFE

2.2 对于每个类别选择合适的化学成分对其进行亚类划分,给出具体的划分方法及划分结果,并对分类结果的合理性和敏感性进行分析。

import numpy as npd12_K = d12.iloc[np.where((d12['类型'] == '高钾'))[0],6:20]
d12_Pb = d12.iloc[np.where((d12['类型'] == '铅钡'))[0],6:20]
print(d12_K.shape)
print(d12_Pb.shape)
(18, 14)
(49, 14)

铅钡玻璃

# Min-Max Normalization
from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
d12_Pb_norm = pd.DataFrame(min_max_scaler.fit_transform(d12_Pb), columns=list(d12_Pb.columns))
无监督变量筛选(聚类前筛选化学成分)

https://datascience.stackexchange.com/questions/29572/is-it-possible-to-do-feature-selection-for-unsupervised-machine-learning-problem

在这里插入图片描述

方差过滤法

https://scikit-learn.org/stable/modules/feature_selection.html

from sklearn.feature_selection import VarianceThresholddef variance_threshold_selector(data, threshold=0.5):selector = VarianceThreshold(threshold)selector.fit(data)return data[data.columns[selector.get_support(indices=True)]]d12_Pb_norm_var = variance_threshold_selector(d12_Pb_norm, 0.01)
print(d12_Pb_norm_var.shape)
d12_Pb_norm_var.head()
(49, 14)
二氧化硅(SiO2)氧化钠(Na2O)氧化钾(K2O)氧化钙(CaO)氧化镁(MgO)氧化铝(Al2O3)氧化铁(Fe2O3)氧化铜(CuO)氧化铅(PbO)氧化钡(BaO)五氧化二磷(P2O5)氧化锶(SrO)氧化锡(SnO2)二氧化硫(SO2)
00.4535450.00.7446810.3656250.4322340.3801300.4052290.0245980.6260060.0000000.2526540.1696430.00.000000
10.2287230.00.0000000.2312500.0000000.0640750.0000000.9848630.3181740.8809590.2540690.3303570.00.161755
20.0123970.00.0000000.4984370.0000000.0475160.0000000.2970670.3800690.8637520.5350320.4732140.00.942320
30.4160750.00.1489360.5484370.2600730.1612670.0000000.4664140.2641600.4121300.6638360.3303570.00.000000
40.3610530.00.0000000.4578130.2161170.2246220.2897600.3320720.5503200.1509170.6249120.1696430.00.000000
拉普拉斯分数

Laplacian Score 是一个对一个训练集样本的特征进行打分的算法。通过这个算法可以给每一个特征打出一个分数,最后再取分数最低的k个特征作为最后选择的特征子集,是标准的 Filter 式方法。

  • https://github.com/ChiHangChen/LaplacianScore

  • https://jundongl.github.io/scikit-feature/tutorial.html

import numpy as np
import pandas as pd
from scipy.spatial.distance import pdist, squareformdef cal_lap_score(features, D, L):features_ = features - np.sum((features @ D) / np.sum(D))L_score = (features_ @ L @ features_) / (features_ @ D @ features_)return L_scoredef get_k_nearest(dist, k, sample_index):# dist is zero means it is the sample itselfreturn sorted(range(len(dist)),key=lambda i: dist[i] if i != sample_index else np.inf)[:k] + [sample_index]def laplacian_score(df_arr, label=None, **kwargs):kwargs.setdefault("k_nearest", 5)'''Construct distance matrix, dist_matrix, using euclidean distance'''distances = pdist(df_arr, metric='euclidean')dist_matrix = squareform(distances)del distances'''Determine the edge of each sample pairs by k nearest neighbor'''edge_sparse_matrix = pd.DataFrame(np.zeros((df_arr.shape[0], df_arr.shape[0]

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com