机器学习分类自动调参算法(含python示例:后台私我拿数据集哦)

news2024/12/23 18:24:19

第一步:读取数据

我这里是把文件存在当前文件夹,新建的data文件夹里。如果不知道把数据放在哪里可以先看一下path是什么,然后把data 文件夹存在path下的路径中。

file = 'bennett20tm.xlsx'
path = os.path.join(os.path.dirname(os.getcwd()),
                    'data',file)
df = pd.read_excel(path)

读完数据后可以看一下df的内容如下:读取到的数据有10行,其中Al,Fe,Mn,S,TOC,U_PPM,V_PPM,MO_PPM是岩石的各种化学物质的含量,也是岩性识别的特征。type则是岩石的类型也是岩性识别的标签。



第二步:对特征数据处理标准化

# standardization
from sklearn.preprocessing import StandardScaler
data_scaler = StandardScaler()
data_scaler.fit(df[df.columns[2:]])
scaled_dataframe = data_scaler.transform(df[df.columns[2:]])

这里使用的是z-core标准化,是将数据按期属性(按列进行)减去其均值,并除以其标准差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1。

其中df[df.columns[2:]]是df中从Al到MO_PPM所有的数据,标准化后的数据存在数组scaled_dataframe中,数据如下:



第三步:相关系数矩阵

new_cols = [i.split('_')[0] for i in df.columns[2:]]
df_scaled = pd.DataFrame(scaled_dataframe,
                         columns=new_cols)
cor_matrix = df_scaled.cov().round(2)
cor_mask = np.triu(np.ones_like(cor_matrix,dtype=bool))
import seaborn as sb
sb.heatmap(cor_matrix,annot=True,vmax=1,vmin=-1,center=0,
           cmap='vlag',mask=cor_mask)

其中new_cols是去除了df表头里后面的-%,只保留了Al,Fe,.....作为新表df_scaled的表头。然后cor_maxtrix是求df_scaled的相关系数,并且保留两位小数。后面的代码则是把相关系数矩阵可视化。后得到的结果为:

可以看到其中Mo和Mn的相关性比较低,值越小,相关性越低。

第四步:主成分分析(PCA)

首先介绍一下pca:主成分分析(Principal Component Analysis),是一种用于探索高维数据的技术。PCA通常用于高维数据集的探索与可视化。还可以用于数据压缩,数据预处理等。PCA可以把可能具有线性相关性的高维变量合成为线性无关的低维变量,称为主成分(principal components),新的低维数据集会尽可能的保留原始数据的变量,可以将高维数据集映射到低维空间的同时,尽可能的保留更多变量。

pca = PCA(n_components = 2) 
pca.fit(scaled_dataframe)
x_pca = pca.transform(scaled_dataframe)
np.unique(df.type)

mapping = {'BPOMZ':0,
           'CPOMZ':1,
           'P-Euxinic':2}
df5 = df['type'].replace(mapping,inplace=False)
df5=df5.to_frame()

plt.scatter(x_pca[:,0],x_pca[:,1],
            c=df5['type']) # c needs numerical data
plt.xlabel('first component')
plt.ylabel('second component')

比如这里设置了n_components=2,等于是把Al,Fe,Mn,S,TOC,U_PPM,V_PPM,MO_PPM这八个特征线性组合在一起,构成两个线性无关的特征。可以观察特征降维后的散点图,如下:

这两个降维后的特征基本上可以完全把三类岩石分隔开。(重合的地方较少)。但是考虑到两个特征还是比较少,所以我又设置了n_components=4,做了主成分分析。代码如下:

pca = PCA(n_components = 4) 
pca.fit(scaled_dataframe)
x_pca = pca.transform(scaled_dataframe)

df_out = pd.DataFrame(x_pca, 
                      columns = ['pc1',
                                 'pc2',
                                 'pc3',
                                 'pc4'])
df_out['type'] = df['type']

到这里数据预处理基本完成,下面要开始正式的分类了。

第五步:划分数据集

先把特征和标签用两个矩阵分别开,然后在整体中取30%的数据为测试集,70%的数据为训练集。

features = ['pc1','pc2','pc3','pc4']
label = 'type'

# read features and labels
#X = df_out[features].to_numpy()
#y = df_out[label].to_numpy()

X = df_out[features].values
y = df_out[label].as_matrix()



# split
X_train, X_test, y_train, y_test = \
    train_test_split(X,y,test_size=0.3,
                     random_state=0)
    

第六步:开始建模

# random forest
# let pipeline do the procedures automatically
pipe = Pipeline([('sr',StandardScaler()),
                 ('clf',RandomForestClassifier(
                     random_state=0))
    ])
                 
# hyperparameter optimization
param_range = [2,3,4,5,6,8,10,12,15,18,20]
param_grid = [{'clf__n_estimators': param_range,
               'clf__criterion':['entropy','gini'],
               'clf__max_depth':[2,4,6,8,10,12,14]
    }]

gs = GridSearchCV(
    estimator=pipe,
    param_grid=param_grid,
    scoring='accuracy',
    cv = 10,
    n_jobs = -1
    )

gs.fit(X_train, y_train)

print('Best params: ', gs.best_params_)

# assess performance using 
# test data that model has nevern seen

lr = gs.best_estimator_ # get best classifier
lr.fit(X_train, y_train)

y_pred = lr.predict(X_test)

# check accuracy
cm = confusion_matrix(y_test,y_pred)
display = ConfusionMatrixDisplay(
    cm,display_labels=lr.classes_).plot()
score = lr.score(X_test,y_test)

# KNN
pipe = Pipeline([('sr',StandardScaler()),
                 ('clf',KNeighborsClassifier())
    ])
                 
# hyperparameter optimization
param_range = [2,3,4,5,6,8,10,12,15,18,20]
param_grid = [{'clf__n_neighbors': param_range,
               'clf__weights':['uniform','distance']
    }] # uniform:距离大小不决定决策,distance:距离影响决策

gs = GridSearchCV(
    estimator=pipe,
    param_grid=param_grid,
    scoring='accuracy',
    cv = 10,
    n_jobs = -1
    )

gs.fit(X_train, y_train)
print('Best params: ', gs.best_params_)

# assess performance using 
# test data that model has nevern seen

lr = gs.best_estimator_ # get best classifier
lr.fit(X_train, y_train)

y_pred = lr.predict(X_test)

# check accuracy
cm = confusion_matrix(y_test,y_pred)
display = ConfusionMatrixDisplay(
    cm,display_labels=lr.classes_).plot()
score = lr.score(X_test,y_test)

这里使用了随机森林和knn两种比较简单的分类算法,关于参数调节是直接用了GridSearchCV这个库可以直接给出最佳的模型参数。其中随机森林给出的最佳参数是Best params:  {'clf__criterion': 'entropy', 'clf__max_depth': 4, 'clf__n_estimators': 20},分类的得分如下图:

knn给出的最佳参数是Best params:  {'clf__n_neighbors': 2, 'clf__weights': 'distance'},分类的得分如下图:

对比两个模型可以看出KNN的效果更好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1874300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

P1114 “非常男女”计划最优解

原题地址 P1114 “非常男女”计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码题解 AC代码&#xff08;1&#xff09; 因为用的是级的算法&#xff0c;所以最后一个 了&#xff0c;这里使用特判来得到的&#xff0c;给你们放一下代码&#xff1a; #include <bi…

ServletConfig与ServletContext详解

文章目录 概要web.xmlServletConfig介绍ServletConfig实例ServletConfig细节ServletContext介绍ServletContext实例ServletContext细节ServletContext获得服务访问次数&#xff08;可拓展&#xff09;总结 概要 web.xml <?xml version"1.0" encoding"UTF-…

荣耀终端发布首个端侧AI反诈检测技术,助力用户防范网络诈骗

在今日盛大开幕的2024年上海世界移动通信大会上&#xff0c;荣耀终端以卓越的创新实力引领行业潮流&#xff0c;率先发布了手机行业中首个端侧AI反诈检测技术。该技术旨在为用户提供更加安全、可靠的网络通信体验&#xff0c;助力防范日益猖獗的网络诈骗行为。 AI-321 | 专注全…

count()方法——统计字符串出现次数

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 count()方法用于统计字符串中某个字符出现的次数&#xff0c;如起始位置从11到结束位置17之间字符出现的次数&#xff0c;如图1所示。 图1…

柔性数组(flexible array)

柔性数组从C99开始支持使用 1.柔性数组的概念 概念&#xff1a; 结构体中&#xff0c;结构体最后一个元素允许是未知大小的数组&#xff0c;这就叫[柔性数组]的成员 struct S {int n;char arr[]; //数组大小未知(柔性数组成员) }; 柔性数组的特点&#xff1a; 结构体中柔性…

【蓝桥杯省赛真题46】python数字币统计 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析

目录 python数字币统计 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python数字币统计 第十四届蓝桥杯青少年组python比赛省赛真题 一、题目…

Autoware 学习

Autoware不同版本介绍 Autoware官方说明文档&#xff1a;https://autowarefoundation.github.io/autoware-documentation/main 使用ROS2和Autoware的自动驾驶汽车免费在线进阶课 译 https://bbs.huaweicloud.com/blogs/detail/283058 Autoware.AI 第一个基于 ROS 1 发布的 Au…

linux的CP指令

实现 CP 指令 src 源文件 des 目标文件 执行流程&#xff1a; 打开源文件&#xff08; src &#xff09; open 打开目标文件&#xff08; des &#xff09; open 写入目标文件 write 读取 src 文件到缓存数组 read 关闭目标文件和源文件 close ./a.out src.c de…

用Vue3和Plotly.js打造一个交互式3D图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 3D交互式曲面图绘制 应用场景 本代码适用于需要绘制3D交互式曲面图的场景&#xff0c;如科学数据可视化、地理数据展示、医疗成像等领域。 基本功能 此代码基于Plotly.js库&#xff0c;实现了以下基本功能&…

如何打造安全DNS以保障业务可用?一文解读

DNS自1987年被实施以来&#xff0c;已成为网络通信中最重要的核心基础设施&#xff0c;同时也是企业对外提供数字服务的关键。没有正常安全的DNS服务&#xff0c;企业经营也就无从谈起。在DNS攻击逐年上升且容易被忽略的现代应用时代&#xff0c;如何打造安全DNS&#xff1f;本…

嘉立创学习

1.两个设置&#xff0c;一般用左边那个 2.焊盘分类 基本焊盘 热风盘&#xff1a;也叫花焊盘&#xff08;负片&#xff09; 隔离焊盘&#xff1a;外面那圈黑色&#xff0c;用作隔离&#xff08;负片&#xff09; 钢网层&#xff1a;&#xff08;锡膏&#xff09; 阻焊层&…

达索系统智能制造巡展路演重庆站圆满结束

2024 年 6 月 21 日&#xff0c;达索系统智能制造巡展路演重庆站成功举办。 会议背景 近年&#xff0c;在人工智能、数字孪生&#xff0c;物联网等新兴技术的推动下&#xff0c;智能制造已然成为中国制造业转型升级的“新质生产力”&#xff0c;它让传统制造业脱胎换骨的同时…

vue2axios的使用

1.安装axios npm i axios 2.配置代理服务器 1.在config.js中配置单个代理服务器 // 开启代理服务器 需要重新启动项目devServer: {proxy: http://localhost:5000}配置简单&#xff0c;请求资源时直接发给前端&#xff08;8080&#xff09;即可&#xff1b;但不能配置多个代理…

经验分享之会员 SaaS 系统

前言 2018年&#xff0c;这是不平凡的一年&#xff1b;互联网行业的中台战略、会员经济等模式如火如荼&#xff0c;同时也逐渐地走入我们公司每个人的视野。在南海集团的战略规划背景下&#xff0c;当时我所在的公司作为集团的研发中心&#xff0c;承担了对会员 SaaS 系统的建…

【漏洞复现】金和OA 任意文件上传

【产品介绍】 金和OA协同办公管理系统C6软件&#xff08;简称金和OA&#xff09;&#xff0c;本着简单、适用、高效的原则&#xff0c;贴合企事业单位的实际需求&#xff0c;实行通用化、标准化、智能化、人性化的产品设计&#xff0c;充分体现企事业单位规范管理、提高办公效…

人脑计算机技术与Neuroplatform:未来计算的革命性进展

引言 想象一下&#xff0c;你在某个清晨醒来&#xff0c;准备开始一天的工作&#xff0c;而实际上你的大脑正作为一台生物计算机的核心&#xff0c;处理着大量复杂的信息。这并非科幻电影的情节&#xff0c;而是人脑计算机技术即将带来的现实。本文将深入探讨FinalSpark公司的…

探索PHP中的函数

在PHP编程中&#xff0c;函数是一个非常重要的概念。函数可以帮助我们将代码组织成可重复使用的块&#xff0c;从而提高代码的可读性和可维护性。本文将介绍PHP中的函数&#xff0c;包括函数的定义、参数传递、返回值、内置函数和自定义函数等内容&#xff0c;帮助读者更好地理…

ONLYOFFICE 8.1 桌面编辑器测评:引领数字化办公新潮流

目录 前言 下载安装 新功能概述 1.PDF 编辑器的改进 2. 演示文稿中的幻灯片版式 3.语言支持的改进 4. 隐藏“连接到云”板块 5. 页面颜色设置和配色方案 界面设计&#xff1a;简洁大方&#xff0c;操作便捷 性能评测&#xff1a;稳定流畅&#xff0c;高效运行 办公环…

算法题--华为od机试考试(整数对最小和、素数之积、找城市)

目录 整数对最小和 题目描述 注意 输出描述 示例1 输入 输出 说明 解析 答案 素数之积 题目描述 输入描述 输出描述 示例1 输入 输出 说明 示例2 输入 输出 说明 解析 找城市 题目描述 输入 输出 示例1 输入 输出 示例2 输入 输出 说明 解析…

Paragon NTFS与Tuxera NTFS有何区别 Mac NTFS 磁盘读写工具选哪个好

macOS系统虽然以稳定、安全系数高等优点著称&#xff0c;但因其封闭性&#xff0c;不能对NTFS格式磁盘写入数据常被人们诟病。优质的解决方案是使用磁盘管理软件Paragon NTFS for Mac&#xff08;点击获取激活码&#xff09;和Tuxera NTFS&#xff08;点击获取激活码&#xff0…