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

74 篇文章 0 订阅
28 篇文章 0 订阅

🎯要点

  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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值