决策树(DT)相关介绍,实现肌电信号(8类)分类

文章目录

          • 一. 概念
          • 二.组成
          • 三.优缺点
          • 四.相关算法
          • 五.python实现

一. 概念

  决策树是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断可行的决策分析方法,是直观运用概率分析的一种图解法。
  分类树(决策树)是一种十分常见的分类方法。它是一种 监督学习,所谓监督学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类。

二.组成

  ·决策点:最后选择的最佳方案
  ·状态节点:代表备选方案的经济效果(期望值)
  ·结果节点:将每个方案在各种自然状态下取得的损益值标注于结果节点的右端

三.优缺点

  优点:①易于理解和实现,在学习过程中不需要使用者了解很多的背景知识,这同时使它的能够直接体现数据的特点,只要通过解释后都有能力去理解决策树所表达的意义;
     ②数据的准备往往是简单或是不必要的,能够同时处理数据型和常规型属性,在相对短的时间内对大型数据作出可行且效果良好的结果;
     ③通过静态测试来对模型进行评测,可以测定模型的可信度。
  缺点:①对连续性的字段比较难预测;
     ②对有时间顺序的数据,需要很多预处理的工作;
     ③当类别太多时,错误可能就会增加的比较快;
     ④一般的算法分类的时候,只是根据一个字段来分类。

四.相关算法

  (1)C4.5:用信息增益率来选择属性
  优点:产生的分类规则易于理解,准确率较高
  缺点:①在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,导致算法的低效;
     ②C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。
  (2)CART:给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。
  优点:①可以生成容易理解的规则;
     ②计算量相对来说不是很大;
     ③可以处理连续和种类字段;
     ④决策树可以清晰的显示哪些字段比较重要。

五.python实现

数据集下载链接:数据集

import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 数据集(可在我的主页里上传的资源里下载哦)
raw_data = pd.read_csv('1_raw_data_13-12_22.03.16.txt',sep='\t',header=0)  # 读取csv数据,并将第一行视为表头,返回DataFrame类型
data = raw_data.values

times = data[::,0]
# features = data[::, 1:3]                           # 主成分分析法PCA
features_data = raw_data[['channel1', 'channel5']]  # 相关性热力图
# features_data = raw_data[['channel2', 'channel8']]  # SVM_RFE递归特征消除法
features = features_data.values
labels = np.array(data[::,-1].astype(int))    # 最后一列为特征值


#选取33%数据作为测试集,剩余为训练集
train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0)

train_features = np.array(train_features)
train_labels = np.array(train_labels)
test_features = np.array(test_features)
test_labels = np.array(test_labels)

# criterion = gini(基尼系数-CART算法),entropy(信息增益-C4.5算法)
# splitter:random
dt = DecisionTreeClassifier(criterion='entropy',splitter='random')
dt.fit(train_features,train_labels)
pred_test = dt.predict(test_features)
accuracy_score = accuracy_score(test_labels,pred_test)
print(accuracy_score)

相关方法分类准确度如下:

决策树各项参数变化 主成分分析 SVM_RFE 相关性热力图
criterion=‘gini’,splitter=‘best’ 79.47% 79.61% 84.13%
criterion=‘entropy’,splitter=‘best’ 79.46% 79.62% 84.16%
criterion=‘entropy’,splitter=‘random’ 79.50% 79.60% 84.21%
criterion=‘gini’,splitter=‘random’ 79.47% 79.55% 84.14%

你可能感兴趣的:(分类算法,表面肌电信号处理,决策树,分类,机器学习)