分类算法中决策树和KNN算法讲解及对iris数据集分类实战(附源码)

简介: 分类算法中决策树和KNN算法讲解及对iris数据集分类实战(附源码)

需要源码请带点赞关注收藏后评论区留言私信~~~

分类是一种重要的数据分析形式,它提取刻画重要数据类的模型。数据分类也被称为监督学习,包括学习阶段(构建分类模型)和分类阶段(使用模型预测给定数据的类标号)两个阶段。数据分类方法只要有决策树归纳、贝叶斯分类、K-近邻分类、支持向量机SVM等方法

一、决策树规约

1. 算法原理

决策树方法在分类、预测、规则提取等领域有广泛应用。在20世纪70年代后期和80年代初期,机器学习研究人员J.Ross Quinlan开发了决策树算法,称为迭代的二分器(Iterative Dichotomiser,ID3),使得决策树在机器学习领域得到极大发展。Quinlan后来又提出ID3的后继C4.5算法,成为新的监督学习算法的性能比较基准。1984年几位统计学家提出CART分类算法

决策树是树状结构,它的每个叶结点对应着一个分类,非叶结点对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划分为若干子集。构造决策树的核心问题是在每一步如何选择恰当的属性对样本做拆分。ID3使用信息增益作为属性选择度量,C4.5使用增益率进行属性选择度量,CART使用基尼指数

2. ID3算法

利用决策树算法对Iris数据构建决策树

结果如下图

代码如下

 

from sklearn.datasets import load_iris
import pandas as pd
from sklearn import tree
from sklearn.tree import export_graphviz
import graphviz  #提前安装
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
dot_file = 'tree.dot'
tree.export_graphviz(clf, out_file = dot_file)
with open("result\\tree.dot", 'w') as f:
    f=export_graphviz(clf, out_file = f,feature_names = ['SL','SW','PL','PW'])
from sklearn.datasets import load_iris
from sklearn import tree
from sklearn.model_selection import train_test_split
iris = load_iris()
X_train,X_test,y_train,y_test=train_test_split(iris.data, iris.target,test_size=0.20,random_state=20)
clf = tree.DecisionTreeClassifier( )
# criterion缺省为'gini'
clf = cltree(clf,feature_names=iris.feature_names, class_names=iris.target_names)
# feature_names=iris.feature_names设置决策树中显示的特征名称
# 预测数据[6,5,5,2]的类别
print('数据[6,5,5,2]的类别:',clf.predict([[6,5,5,2]]))
print('测试集的标签:\n',y_test)
print('模型准确率为:',"{0:.3f}".format(clf.score(X_test,y_test)))

二、KNN算法

KNN 是一个理论上比较成熟的方法,也是最简单的机器学习算法之一

算法最初由Cover和Hart于1968年提出,它根据距离函数计算待分类样本 X 和每个训练样本的距离(作为相似度),选择与待分类样本距离最小的K个样本作为X的K个最近邻,最后以X的K个最近邻中的大多数样本所属的类别作为X的类别

1. 算法原理

如图所示,有方块和三角形两类数据,它们分布在二维特征空间中。假设有一个新数据(圆点)需要预测其所属的类别,根据“物以类聚”,可以找到离圆点最近的几个点,以它们中的大多数点的类别决定新数据所属的类别。如果k = 3,由于圆点近邻的3个样本中,三角形占比2/3,则认为新数据属于三角形类别。同理,k = 5,则新数据属于正方形类别

如何度量样本之间的距离(或相似度)是KNN算法的关键步骤之一。常见的相似度度量方法包括闵可夫斯基距离(当参数p = 2时为欧几里得距离,参数p = 1时为曼哈顿距离)、余弦相似度、皮尔逊相似系数、汉明距离、杰卡德相似系数等

(1)    汉明距离

两个等长字符串s1和s2之间的汉明距离(Hamming distance)定义为将其中一个变为另外一个所需要做的最小替换次数。例如:1011101与1001001之间的汉明距离是2,2143896与2233796之间的汉明距离是3,”toned”与”roses”之间的汉明距离是3

(2)    杰卡德相似系数

在上面的例子中,用M11表示两个用户都看过的电影数目,M10表示用户A看过而用户B没有看过的电影数目,M01表示用户A没看过而用户B看过的电影数目,M00表示两个用户都没有看过的电影数目。Jaccard相似性系数可以表示为

KNN算法大致包括三个步骤:

1. 算距离:给定测试对象,计算它与训练集中的每个对象的距离;

2. 找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻;

3. 做分类:根据这k个近邻归属的主要类别,来对测试对象分类

2. KNN算法

输入:簇的数目k和包含n个对象的数据库。 输出:k个簇,使平方误差最小。

方法: (1)初始化距离为最大值;

(2)计算测试样本和每个训练样本的距离dist;

(3)得到目前 K个最近邻样本中的最大距离maxdist;

(4)如果dist小于maxdist,则将该训练样本作为K最近邻样本;

(5)重复步骤2-4,直到测试样本和所有训练样本的距离都计算完毕;

(6)统计K个最近邻样本中每个类别出现的次数;

(7)选择出现频率最大的类别作为测试样本的类别

利用KNN对iris数据集分类

部分代码如下

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data[:,:2]
Y = iris.target
print(iris.feature_names)
cmap_light = ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000','#00FF00','#0000FF'])
clf = KNeighborsClassifier(n_neighbors = 10,weights = 'uniform')
clf.fit(X,Y)
#画出决策边界
x_min,x_max = X[:,0].min()-1,X[:,0].max()+1
y_min,y_max =y,Z,cmap = cmap_light)
#绘制预测结果图
plt.scatter(X[:,0],X[:,1],c = Y,cmap = cmap_bold)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title('3_Class(k = 10,weights = uniform)')
plt.show()

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
23小时前
|
编解码 算法 数据可视化
【视频】时间序列分类方法:动态时间规整算法DTW和R语言实现
【视频】时间序列分类方法:动态时间规整算法DTW和R语言实现
|
1天前
|
机器学习/深度学习 数据采集 算法
共享单车需求量数据用CART决策树、随机森林以及XGBOOST算法登记分类及影响因素分析
共享单车需求量数据用CART决策树、随机森林以及XGBOOST算法登记分类及影响因素分析
|
2天前
|
机器学习/深度学习 自然语言处理 算法
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享(下)
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享
10 0
|
2天前
|
机器学习/深度学习 算法 大数据
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享(上)
【视频】K近邻KNN算法原理与R语言结合新冠疫情对股票价格预测|数据分享
|
2天前
|
机器学习/深度学习 算法 数据挖掘
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
|
9天前
|
机器学习/深度学习 算法 数据可视化
样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
13 0
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
23 2
|
1月前
|
算法
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
40 1