代码编织梦想


前言

本文采用支持向量机和随机森林算法对鸢尾花数据集进行了分类实验,实验结果表明,对于鸢尾花数据集来说,支持向量机的分类效果会更好,分类正确率达到100%,且没有出现过拟合的现象。

主要参考文献如下:
1、机器学习SVM:基于Python实现的鸢尾花分类问题
2、【集成学习】随机森林实现鸢尾花分类


提示:以下是本篇文章正文内容,下面案例可供参考

1 实验结果及分析

1.1 支持向量机对鸢尾花数据集分类效果

分类正确率为100%,其中各类别的分类效果如表1、图1所示。

表1 SVM分类指标得分情况
类别precisionrecallf1-scoresupport
山鸢尾1.001.001.0017
变色鸢尾1.001.001.0013
维吉尼亚鸢尾1.001.001.008

支持向量机分类情况

图1 SVM二特征分类效果

1.2 随机森林对鸢尾花数据集分类效果

分类正确率为97.36%,其中各类别的分类情况下表和下图所示。

表2 RF分类指标得分情况
类别precisionrecallf1-scoresupport
山鸢尾1.001.001.0013
变色鸢尾1.000.940.9716
维吉尼亚鸢尾0.91.000.959

RF分类效果

图2 RF二特征分类效果

1.3 实验小结

对于鸢尾花数据集来说,支持向量机的分类效果会更好,分类正确率为100%。图1和图2的对比可得随机森林分类器出现了过拟合情况。

2 实验代码

2.1 SVM实验代码

import numpy as np
from sklearn.datasets import load_iris
from sklearn.svm import LinearSVC
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
import matplotlib as mpl
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt

if __name__ == "__main__":
    iris = load_iris()
    X1 = iris.data
    y = iris.target
    X_train, X_test, y_train, y_test = train_test_split(X1, y, random_state=14)
    sc = StandardScaler()  # 数据预处理和归一化
    X_train = sc.fit_transform(X_train)
    X_test = sc.transform(X_test)

    # 模型训练
    clf = LinearSVC(random_state=0)
    clf = clf.fit(X_train, y_train)
    y_pred = clf.predict(X_test)
    print("支持向量机准确率:", accuracy_score(y_test, y_pred))
    print("其他指标:", classification_report(y_test, y_pred, target_names=['0', '1', '2']))

    # 指定默认字体
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False

    # 画图
    x = iris.data[:, :2]
    clf.fit(x, y)
    N = 50
    cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
    cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
    x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1  # 第0列的范围
    y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1  # 第一列的范围
    xx, yy = np.meshgrid(np.linspace(x_min, x_max, N), np.linspace(y_min, y_max, N))  # 生成网格采样点
    z_show = np.stack((xx.flat, yy.flat), axis=1)  # 测试点
    z = clf.predict(z_show)  # 预测分类值
    plt.figure()
    plt.pcolormesh(xx, yy, z.reshape(xx.shape), shading='auto', cmap=cmap_light)
    plt.scatter(x[:, 0], x[:, 1], c=y, cmap=cmap_bold, edgecolors='k', s=20)
    plt.xlim(xx.min(), x.max())
    plt.title("SVMClassifer")
    plt.show()

2.2 随机森林实验代码

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
import matplotlib as mpl
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

RF = RandomForestClassifier(n_estimators=100, n_jobs=4, oob_score=True)
iris = load_iris()
X1 = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X1, y, test_size=0.25, random_state=0)
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

RF.fit(X_train, y_train)
y_pred = RF.predict(X_test)
print("随机森林准确率:", accuracy_score(y_test, y_pred))
print("其他指标:\n", classification_report(y_test, y_pred, target_names=['0', '1', '2']))

# 画图
x = iris.data[:, :2]
RF.fit(x, y)
N = 50
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
cmap_bold = ListedColormap(['r', 'g', 'b'])
# 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.linspace(x_min, x_max, N), np.linspace(y_min, y_max, N))
z_show = np.stack((xx.flat, yy.flat), axis=1)  # 测试点
z = RF.predict(z_show)
plt.figure()
plt.pcolormesh(xx, yy, z.reshape(xx.shape), shading='auto', cmap=cmap_light)
plt.scatter(x[:, 0], x[:, 1], c=y, cmap=cmap_bold, edgecolors='k', s=20)
plt.xlim(xx.min(), x.max())
plt.title('RandomForestClassifer')
plt.show()


3 实验遇到的问题总结

3.1 数据归一化处理

实验代码:

sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

参考文献:Sklearn之数据预处理——StandardScaler

3.2 背景色显示不全

原先代码:

x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() - 1
y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1

修改代码:

x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1
y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39276221/article/details/127169664

支持向量机实例讲解-爱代码爱编程

简介 掌握机器学习算法不再是天方夜谭的事情。大多数初学者都是从回归模型学起。虽然回归模型简单易学易上手,但是它能解决我们的需求吗?当然不行!因为除了回归模型外我们还可以构建许多模型。 我们可以把机器学习算法看成包含剑、锋刃、弓箭和匕首等武器的兵器库。你拥有各式各样的工具,但是你应该在恰当的时间点使用它们。比如,我们可以把回归模型看做“剑”,它可以

集成k-最近邻(k-nn)、朴素贝叶斯、logistic回归、支持向量机(svm)、决策树、随机森林、多层感知机的一个机器学习示例_cjv chen的博客-爱代码爱编程

(1) 创建机器学习所需环境 python版本为Python 3.6.2NumPy:用于使用Python进行数值处理。PIL:一个简单的图像处理库。scikit-learn:包含我们今天要介绍的机器学习算法。Keras和T

|机器学习| - r语言 - 随机森林 - 分类、回归、预测、筛选变量有史以来超详细解析(干货满满)_慕小白$的博客-爱代码爱编程_r语言随机森林特征筛选

R语言随机森林详细解析(基于randomforest包和varSelRF包) 随机森林 基于R你即将从这里看到在这里你不会看到分类与回归交叉验证变量筛选数据可视化利用随机森林聚类(无监督学习)随机森林简单原理让我们从

机器学习-KNN算法详解&iris数据集的分类-爱代码爱编程

微信公众号:龙跃十二 我是小玉,一个平平无奇的小天才。 最近在研究机器学习的一些算法,说到这里,最先少不了的就是监督学习里的一些分类算法,比如:朴素贝叶斯(naive_bayes)、KNN、决策树、随机森林、SVM。我也把最近学的这些算法用来练练手,做一个数据集的分类,以下代码仅供参考奥! 这里是重点!!! 今天先来讲讲利用KNN算法来

Python数据科学学习笔记之——机器学习-爱代码爱编程

机器学习 1、什么是机器学习 机器学习经常被归类为人工智能的子领域,但我觉得这种归类方法存在误导嫌疑。虽然对机器学习的研究确实是源自人工智能领域,但是机器学习的方法却应用于数据科学领域,因此我认为机器学习看作是一种数学建模更合适。 机器学习的本质就是借助数学模型理解数据。当我们给模型装上可以适应观测数据的可调参数时,“学习” 就开始了;此时的程序被认

机器学习学习笔记之——分类器的不确定度估计-爱代码爱编程

分类器的不确定度估计 我们还没有谈到 scikit-learn 接口的另一个有用之处,就是分类器能够给出预测的不确定度估计。一般来说,你感兴趣的不仅是分类器会预测一个测试点属于哪个类别,还包括它对这个预测的置信程度。在实践中,不同类型的错误会在现实应用中导致非常不同的结果。想象一个用于测试癌症的医疗应用。假阳性预测可能只会让患者接受额外的测试,但假阴性预

机器学习算法 01 —— K-近邻算法(数据集划分、归一化、标准化)-爱代码爱编程

文章目录 系列文章K-近邻算法1 什么是K-近邻算法1.1 K-近邻算法(KNN)概念1.2 举例说明K-近邻算法1.3 K-近邻算法流程总结2 K-近邻算法API初步使用2.1 Scikit-learn工具介绍2.2 K-近邻算法API3 距离公式3.1 距离公式基本性质3.2 常见的举例公式欧式距离(Euclidean Distance)曼哈顿

机器学习算法 08 —— 支持向量机SVM算法(核函数、手写数字识别案例)-爱代码爱编程

文章目录 系列文章支持向量机SVM算法1 SVM算法简介1.1 引入1.2 算法定义2 SVM算法原理2.1 线性可分支持向量机2.2 SVM计算过程与算法步骤(有点难,我也没理解透,建议跳过)推导目标函数目标函数求解拉格朗日乘数法对偶问题整体流程确定3 SVM的损失函数4 SVM的核方法4.1 什么是核函数4.2 常见核函数5 SVM回归6 SV

机器学习(13)--SVM支持向量机-爱代码爱编程

概念: 分割界面之间没有数据点,分割界面之间的间隔,叫做硬间隔 分割界面之间有数据点,分割界面之间的间隔,叫做软间隔 支持向量确定平面,加了核函数就可做非线性的    高斯核: gama越大,分割界面非线性越强烈 c越大,过渡带越窄(分割界面之间的大小)      训练集上有多个分类平面,但哪个是最优的?

机器学习---第一个应用——鸢尾花分类-爱代码爱编程

| 1.1 引言 前面我们粗浅地介绍了机器学习中的监督学习、无监督学习、分类、聚类等概念。参见---《机器学习---概述》。同时介绍了机器学习中数据及数据的处理过程---《机器学习---数据简介及数据清洗概述》,今天我们来介绍或许在入门机器学习过程中每个人都可能会接触的一个项目---鸢尾花分类。我们会构建一个简单的机器学习应用,并构建我们的第一个模型。同

机器学习实验——分类学习算法-爱代码爱编程

一、目的和要求 1、理解监督学习和分类学习的基本概念。 2、掌握分类学习五种算法的算法流程。 3、学会编写分类学习五种算法的Python编程方法。 4、会使用分类学习评价方法测评不同的算法性能 二、设备或环境 个人电脑、Anaconda2、Python2.7.10和网络 三、实验步骤   1、设计算法步骤和流程 2、根据算法编写Pytho

【视频】支持向量机svm、支持向量回归svr和r语言网格搜索超参数优化实例_拓端研究室的博客-爱代码爱编程

原文链接:http://tecdat.cn/?p=23305 原文出处:拓端数据部落公众号 什么是支持向量机 (SVM)? 我们将从简单的理解 SVM 开始。 【视频】支持向量机SVM、支持向量回归SVR和R语言网格搜索超参数优化实例 支持向量机SVM、支持向量回归SVR和R语言网格搜索超参数优化实例 ,时长07:24

数据分析4——挖掘建模(监督学习中的分类、回归模型,无监督学习)_啧啧啧@的博客-爱代码爱编程

文章目录 挖掘建模1、机器学习与建模2、训练集、测试集、验证集3、监督学习中的分类模型(1)KNN(2)朴素贝叶斯——适合离散数据(3)生成模型与判别模型(4)决策树安装Graphviz:(5)SVM(支持向量

机器学习笔记(7)——决策树&随机森林代码_随机森林封装代码-爱代码爱编程

机器学习笔记(7)——决策树&随机森林代码 本文部分图片与文字来源网络或学术论文,仅供学习使用,持续修改完善中。 目录 机器学习笔记(7)——决策树&随机森林代码 1、决策树 python写决策树 sklearn实现决策树分类器  sklearn实现决策树回归器 2、随机森林 sklearn实现随机森林分类器  skle