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

Python热频随机森林分类器算法模型模拟

🎯要点

  1. 研究发射测量斜率和时滞热频率表征,使用外推法计算三维磁场并定性比较
  2. 使用基于焓的热演化环模型模拟每条线的热力学响应,测试低频、中频和高频热场景
  3. 使用光学薄、高温、低密度等离子体的单位体积辐射功率或发射率公式等建模计算
  4. 使用直方图显示发射测量斜率,计算互相关映射

🍪语言内容分比

在这里插入图片描述
在这里插入图片描述

🍇Python随机森林模型

引导聚合

在需要良好模型可解释性的应用中,决策树效果非常好,尤其是在深度较小的情况下。然而,具有真实世界数据集的决策树具有很大的深度,深度较高的决策树更容易过度拟合,从而导致模型的方差更大。随机森林模型探索了决策树的这一缺点。在随机森林模型中,原始训练数据是随机抽样并替换的,从而生成小的数据子集(见下图)。这些子集也称为引导样本。然后,这些引导样本作为训练数据输入到许多大深度的决策树中。每个决策树都基于这些引导样本单独训练。这种决策树的聚合称为随机森林集成。集成模型的最终结果通过计算所有决策树的多数票来确定。由于每个决策树都以不同的训练数据集作为输入,因此原始训练数据集中的偏差不会影响从决策树聚合中获得的最终结果。

生成有放回的引导样本:
在这里插入图片描述

随机森林算法

随机森林算法有三个主要超参数,需要在训练之前设置。这些包括节点大小、树的数量和采样的特征数量。从这里开始,随机森林分类器可用于解决回归或分类问题。随机森林算法由一组决策树组成,集合中的每棵树都由从有替换训练集中抽取的数据样本组成,称为引导样本。在该训练样本中,三分之一被留作测试数据,称为袋外样本。然后通过特征装袋注入另一个随机性实例,为数据集增加更多多样性并降低决策树之间的相关性。根据问题的类型,预测的确定会有所不同。对于回归任务,将对各个决策树进行平均,对于分类任务,多数投票(即最常见的分类变量)将产生预测类。最后,然后使用袋外样本进行交叉验证,最终确定该预测。
在这里插入图片描述
随机森林算法结合了 (1) 引导聚合和 (2) 特征随机性,使用同一数据集构建许多决策树。

  • 引导聚合是一种在给定迭代次数和变量(引导样本)内随机抽取数据子集的技术。通常对所有迭代和样本的预测进行平均,以获得最可能的结果。重要的是要理解,它不是将数据“分块”成小块并在其上训练单个树,而是仍然保持初始数据大小。这是一个应用集成模型的示例。
  • 特征随机性的主要作用是降低决策树模型之间的相关性。与可以利用所有特征来辨别最佳节点分割的决策树相比,随机森林算法将随机选择这些特征进行决策。最终,这也允许在不同的特征上进行训练。

Python分类器

import pandas as pd
import numpy as np
from umap import UMAP
import seaborn as sns
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.cluster import AgglomerativeClustering
from sklearn.neighbors import kneighbors_graph
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
mypath = '*insert file path/waveforms.csv'
data = pd.read_csv(mypath, index_col = 'uid')
print(f'{data.shape[0]} unique experiment identifiers (uid), recorded with a sampling frequency (KHz) of {((data.shape[1]-1)/5)}')
data.organoid.value_counts()

定义可视化颜色

mycolors = {'Data_D':     '#FFA500',
           'Data_G':       '#4169E1', 
           'Data_F':       '#FF4500', 
           'Data_C':       '#9400D3', 
           'Data_A':       '#32CD32',  
           'Data_E':       '#228B22', 
           'Data_G_V2' :   '#006400',  
           'Data_H':       '#00BFFF',  
           'Data_E_V2':    '#DC143C', 
           'Data_F_V2':    '#0000FF', 
           'Data_B':       '#000000', 
           }
data['color'] = data['organoid'].apply(lambda orgID: mycolors[orgID])

可视化唯一的实验标识符

fig, ax = plt.subplots(figsize=(15, 8))
sns.barplot(x=data.organoid.value_counts().index, y=data.organoid.value_counts(), palette=mycolors)

plt.xticks(rotation=30,fontsize=14)
plt.yticks(fontsize=14)
ax.set_xlabel('Class type', fontsize=16)
ax.set_ylabel('Number of waveforms', fontsize=16)
plt.rcParams["font.family"] = "Arial"

right_side = ax.spines["right"]
right_side.set_visible(False)
top_side = ax.spines["top"]
top_side.set_visible(False)
plt.savefig('Figures/barplot.png', dpi = 300, bbox_inches="tight")
plt.show()

鉴于我们正在分析细胞外记录,我们将可视化每个数据集类别产生的平均波形。

class_names = data['organoid'].unique()
fig, ax = plt.subplots(1,9, figsize=(24,4.5))
for unique_class in class_names:    
        df_new = data[data['organoid'] == unique_class] 
        df_new = df_new.iloc[:,:-2].to_numpy() 
        data_mean_perclass = np.mean(df_new, axis=0)
        sampling_freq = np.linspace(0, 5, 150) 
for i in range(class_names.shape[0]): 
            if unique_class == class_names[i]:
                
                for row_num in range(df_new.shape[0]): 
                    ax[i].plot(sampling_freq, df_new[row_num,:], color = 'lightgray')

                ax[i].plot(sampling_freq,data_mean_perclass, color=mycolors[unique_class], linewidth=3)
                ax[i].set_ylim([-1.8, 1.8])
                ax[i].grid()
                ax[i].axis('off')
                ax[i].title.set_text(unique_class)  
                plt.rcParams["font.family"] = "Arial"
                
            else: 
                continue
        
        scalebar = AnchoredSizeBar(ax[8].transData, 1, "1 ms", 'lower right', frameon=False, size_vertical=0.02, pad=0.1)
        ax[8].add_artist(scalebar)
        
plt.savefig('Figures/spikes.png', dpi = 300)

👉参阅、更新:计算思维 | 亚图跨际


http://www.kler.cn/a/308972.html

相关文章:

  • 代码随想录第二十一天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
  • 比ChatGPT更酷的AI工具
  • 关于GCC内联汇编(也可以叫内嵌汇编)的简单学习
  • React的基础API介绍(二)
  • C++模板特化实战:在使用开源库boost::geometry::index::rtree时,用特化来让其支持自己的数据类型
  • Android Framework AMS(16)进程管理
  • mac系统安装最新(截止2024.9.13)Oracle JDK操作记录
  • C++速通LeetCode简单第10题-翻转二叉树
  • Flink难点和高阶面试题:Flink的状态管理机制如何保证数据处理的准确性和完整性
  • 一步到位:通过 Docker Compose 部署 EFK 进行 Docker 日志采集
  • FastAPI--如何自定义Docs UI,包括多个APP、静态资源、元数据等
  • kotlin的密封类
  • springboot+redis+缓存
  • 二十种编程语言庆祝中秋节
  • CesiumJS+SuperMap3D.js混用实现通视分析
  • SprinBoot+Vue基于推荐算法的智能书店的设计与实现
  • 车载软件架构 --- SOA设计与应用(下)
  • grafana升级指南
  • vue table id一样的列合并
  • 深度学习和机器学习的区别
  • linux-安全管理-用户认证
  • leetcode 345.翻转字符串中的元音字母
  • 浅谈住房城乡建设部科技创新平台布局重点方向
  • 代码随想录Day 48|单调栈,leetcode题目:739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II
  • Reactive 编程-Vert.x
  • 云原生(Cloud Native)简介及相关技术