模式识别实验四

本文介绍了如何使用scikit-learn库中的KNN、决策树(包括可视化)和随机森林算法对Iris数据集进行分类。实验涉及数据预处理、模型训练、参数调整以及结果分析,展示了这些分类器在实际应用中的性能。
摘要由CSDN通过智能技术生成

实验四

一   实验名称

近邻法与决策树

二 目的和意义

  1. 通学习多种分类器的使用方法,学会通过封装的 scikit-learn 中的机器学习算法解决分类问题。
  2. 通过实践学习利用文档编写机器学习程序,调整参数,优化结果,并解决问题的方法。

三 操作步骤或算法结构

  1. 阅读机器学习库 scikit-learn 文档中相关函数部分(https://scikit-learn.org/stable/modules/classes.html)。导入 iris.csv 数据,或其他任何分类训练数据。(可以使用 train_test_split 函数将样本处理为训练集和测试集)

  2. 使用 KNN 函数(KNeighborsClassifier)实现K近邻分类器的训练,并测试分类结果。调整近邻数、算法,观察结果变化。

  3. 使用决策树分类器(DecisionTreeClassifier)训练数据。使用不同的决策树算法,并使用 graphviz 生成决策树图像,观察不同算法的区别。

  4. 使用随机森林算法(RandomForestClassifier)训练分类器,并测试分类器的准确度。

四  结构程序设计

  1. 导入实验数据

    from sklearn.datasets import load_iris
    
    iris = load_iris()
    
  2. 使用KNN的分类实现

    import numpy as np
    from sklearn.preprocessing import StandardScaler
    from sklearn.model_selection import train_test_split
    from sklearn.neighbors import KNeighborsClassifier
    iris = datasets.load_iris()
    
    sc = StandardScaler()
    sc.fit(iris.data)
    sdata = sc.transform(iris.data)
    
    traindata, testdata, trainlabel, testlabel=train_test_split(iris.data, iris.target,test_size=0.5,random_state=0,stratify=iris.target)
    
    knn = KNeighborsClassifier(n_neighbors=3)
    knn.fit(traindata,trainlabel)
    predict = knn.predict(testdata)
    print('分类准确率:',knn.score(testdata,testlabel))
    
  3. 使用决策树的分类实现

    from sklearn import tree
    
    res = tree.DecisionTreeClassifier()
    res = res.fit(iris.data, iris.target)
    
    # 将模型存入dot文件iris.dot。
    with open("iris.dot", 'w') as f:
        f = tree.export_graphviz(res, out_file=f)
    

    用 graphviz 的dot命令生成决策树的可视化文件,在命令行中运行

    dot -Tpdf iris.dot -o iris.pdf
    
  4. 使用随机森林算法进行分类

    import numpy as np
    from matplotlib.colors import ListedColormap
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.ensemble import ExtraTreesClassifier
    
    RF = RandomForestClassifier(n_estimators=100, n_jobs=4, oob_score=True)
    iris = load_iris()
    x = iris.data[:, :2]
    y = iris.target
    RF.fit(x, y)
    h = .02
    cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
    cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
    for weight in ['uniform', 'distance']:
        x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1
        y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1
        xx, yy = np.meshgrid(
            np.arange(x_min, x_max, h),
            np.arange(y_min, y_max, h)
        )
        z = RF.predict(np.c_[xx.ravel(), yy.ravel()])
        z = z.reshape(xx.shape)
        plt.figure()
        plt.pcolormesh(xx, yy, z, cmap=cmap_light)
        plt.scatter(x[:, 0], x[:, 1], c=y, cmap=cmap_bold, edgecolors='k', s=20)
        plt.xlim(xx.min(), xx.max())
        plt.title('RandomForestClassifier')
    plt.show()
    print('RandomForestClassifier:', RF.score(x, y))
    

五  实验结果分析

决策树结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在理解层面可以将决策树类比数据结构课程中的二叉查找树,以最多 ⌈ log ⁡ 2 n ⌉ \lceil\log_2n\rceil log2n t r u e / f a l s e true /false true/false 判断得到结果

随机森林结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

分类准确率达到 92.7 % 92.7\% 92.7%,随机森林模型在多样本分类中有者广泛的应用。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值