分类算法中决策树和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()

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

相关文章
|
4天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
31 8
|
4天前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
21 7
|
1月前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。
|
8天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
1月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
1月前
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
1月前
|
机器学习/深度学习 人工智能 算法
【机器学习】决策树算法
【机器学习】决策树算法
|
19天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
4天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
5天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
下一篇
无影云桌面