利用支持向量机实现鸢尾花数据的分类

目录

一、实验内容:

二、源程序及结果截图:

1.源程序核心代码:

        (1)采用鸢尾花数据集进行SVM网络模型训练,计算模型在训练集和测试集的识别准确率。

        (2)采用鸢尾花数据集进行BP网络模型训练,计算模型在训练集和测试集的识别准确率。

        (3)采用K均值(K-mean)算法对鸢尾花数据集进行聚类,c=3。

2.运行结果:

三、分析与思考:

1、代码处理数据思路:

2、实验过程中遇到的问题以及解决方法:

1.在执行聚类算法时候,由于n_init这个参数的默认值已经从1.4版本中的10变成了’auto’,所以需要在调用KMeans(n_clusters=3,n_init=10,random_state=42)时需要加上n_init=10​编辑​编辑

2.可视化图像的选取:

3.对于鸢尾花数据的划分,我的划分为训练集占到总数据集的70%,测试集占到30%,


一、实验内容:

  1. 对鸢尾花数据集进行预处理(规范化)
  2. 采用Sklearn实现分类算法:

采用鸢尾花数据集进行SVM,BP网络模型训练,计算模型在训练集和测试集的识别准确率3

      3.采用Sklearn实现聚类算法:

采用K均值(K-mean)算法对鸢尾花数据集进行聚类,c=3。

二、源程序及结果截图:

1.源程序核心代码
        (1)采用鸢尾花数据集进行SVM网络模型训练,计算模型在训练集和测试集的识别准确率。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载鸢尾花数据集

iris = datasets.load_iris()
X = iris.data
y = iris.target

# 数据规范化处理

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 将数据存储到容器中

data = pd.DataFrame(X_scaled, columns=iris.feature_names)
data['target'] = y

# 可视化数据

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(data['sepal length (cm)'], data['sepal width (cm)'], data['petal length (cm)'], c=data['target'])

ax.set_xlabel('sepal length (cm)')
ax.set_ylabel('sepal width (cm)')
ax.set_zlabel('petal length (cm)')
ax.set_title('Iris Data')
plt.show()

# 划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)

# SVM模型训练和预测
svm_model = SVC()
svm_model.fit(X_train, y_train)
svm_train_pred = svm_model.predict(X_train)
svm_test_pred = svm_model.predict(X_test)

# 计算模型在训练集和测试集的准确率

svm_train_accuracy = accuracy_score(y_train, svm_train_pred)
svm_test_accuracy = accuracy_score(y_test, svm_test_pred)
print("SVM模型在训练集的准确率:", svm_train_accuracy)
print("SVM模型在测试集的准确率:", svm_test_accuracy)

# 可视化分类结果

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X_train[:, 0], X_train[:, 1], X_train[:, 2], c=y_train)
ax.set_xlabel('sepal length (cm)')
ax.set_ylabel('sepal width (cm)')
ax.set_zlabel('petal length (cm)')
ax.set_title('SVM Classification - Training Set')
plt.show()

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.scatter(X_test[:, 0], X_test[:, 1], X_test[:, 2], c=y_test)
ax.set_xlabel('sepal length (cm)')
ax.set_ylabel('sepal width (cm)')
ax.set_zlabel('petal length (cm)')
ax.set_title('SVM Classification - Test Set')

plt.show()
        (2)采用鸢尾花数据集进行BP网络模型训练,计算模型在训练集和测试集的识别准确率。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 数据规范化处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 将数据存储到容器中
data = pd.DataFrame(X_scaled, columns=iris.feature_names)
data['target'] = y
# 可视化数据
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(data['sepal length (cm)'], data['sepal width (cm)'], data['petal length (cm)'], c=data['target'])
ax.set_xlabel('sepal length (cm)')
ax.set_ylabel('sepal width (cm)')
ax.set_zlabel('petal length (cm)')
ax.set_title('Iris Data')
plt.show()
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)
# BP网络模型训练和预测
bp_model = MLPClassifier()
bp_model.fit(X_train, y_train)
bp_train_pred = bp_model.predict(X_train)
bp_test_pred = bp_model.predict(X_test)
# 计算模型在训练集和测试集的准确率
bp_train_accuracy = accuracy_score(y_train, bp_train_pred)
bp_test_accuracy = accuracy_score(y_test, bp_test_pred)
print("BP网络模型在训练集的准确率:", bp_train_accuracy)
print("BP网络模型在测试集的准确率:", bp_test_accuracy)
# 可视化分类结果
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X_train[:, 0], X_train[:, 1], X_train[:, 2], c=y_train)
ax.set_xlabel('sepal length (cm)')
ax.set_ylabel('sepal width (cm)')
ax.set_zlabel('petal length (cm)')
ax.set_title('BP Network Classification - Training Set')
plt.show()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X_test[:, 0], X_test[:, 1], X_test[:, 2], c=y_test)
ax.set_xlabel('sepal length (cm)')
ax.set_ylabel('sepal width (cm)')
ax.set_zlabel('petal length (cm)')
ax.set_title('BP Network Classification - Test Set')
plt.show()

        (3)采用K均值(K-mean)算法对鸢尾花数据集进行聚类,c=3。
import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

from sklearn import datasets

from sklearn.preprocessing import StandardScaler

from sklearn.cluster import KMeans



# 加载鸢尾花数据集

iris = datasets.load_iris()

X = iris.data

y = iris.target



# 数据规范化处理

scaler = StandardScaler()

X_scaled = scaler.fit_transform(X)

# 将数据存储到容器中

data = pd.DataFrame(X_scaled, columns=iris.feature_names)

data['target'] = y



# 可视化数据

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

ax.scatter(data['sepal length (cm)'], data['sepal width (cm)'], data['petal length (cm)'], c=data['target'])

ax.set_xlabel('sepal length (cm)')

ax.set_ylabel('sepal width (cm)')

ax.set_zlabel('petal length (cm)')

ax.set_title('Iris Data')

plt.show()



# 使用K均值算法进行聚类

kmeans = KMeans(n_clusters=3, n_init=10,random_state=42)

kmeans.fit(X_scaled)



# 获取聚类结果

labels = kmeans.labels_



# 可视化聚类结果

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

ax.scatter(data['sepal length (cm)'], data['sepal width (cm)'], data['petal length (cm)'], c=labels)

ax.set_xlabel('sepal length (cm)')

ax.set_ylabel('sepal width (cm)')

ax.set_zlabel('petal length (cm)')

ax.set_title('K-means Clustering')

plt.show()
2.运行结果

采用鸢尾花数据集进行SVM网络模型训练,计算模型在训练集和测试集的识别准确率。

数据预处理后进行的三维可视化图像:

对预处理后的数据进行SVM网络模型训练

计算模型在训练集和测试集的识别准确率。

---------------------------------------------------------------------------------

采用鸢尾花数据集进行BP网络模型训练,计算模型在训练集和测试集的识别准确率。

数据预处理后进行的三维可视化图像:

采用鸢尾花数据集进行BP网络模型训练

计算模型在训练集和测试集的识别准确率。

采用K均值(K-mean)算法对鸢尾花数据集进行聚类,c=3。

预处理后的三维图像:

采用K均值(K-mean)算法对鸢尾花数据集进行聚类,c=3。

三、分析与思考:

1、代码处理数据思路:

1.首先要将鸢尾花数据集进行下载,存储到容器中

2.对于得到的数据集中的每一条数据进行预处理,归一化处理
3.然后再预处理之后的数据基础之上进行SVM,BP模型训练然后使用分类算法对于测试集分类以及使用K均值模型算法对测试集进行聚类处理。
2、实验过程中遇到的问题以及解决方法
1.在执行聚类算法时候,由于n_init这个参数的默认值已经从1.4版本中的10变成了’auto’,所以需要在调用KMeans(n_clusters=3,n_init=10,random_state=42)时需要加上n_init=10
打开Kmeans发现:确实已经变为了’auto’

2.可视化图像的选取:

        首先使用的二维视图,但是根据数据集原始数据可以知道,每一个鸢尾花都是由四个数据量确定的,二维只能体现出两个数据量的关系,所以二维的区分度不高可视化程度不是特别高,于是我又使用了三维视图如正文。

        鸢尾花数据的原始数据,每个鸢尾花数据都是由四个数据分量组成的,如下图,所以使用三维视图依然不够准确但是相比二维平面来讲效果是很显著的。

3.对于鸢尾花数据的划分,我的划分为训练集占到总数据集的70%,测试集占到30%,

        总共数据集有150组数据,训练集105组,测试集45组。

  • 17
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
鸢尾花分类是一个经典的机器学习问题,支持向量机(Support Vector Machine,SVM)是其中一种有效的分类算法。下面是一个使用Python的Scikit-learn库进行鸢尾花分类的例子: 首先,导入所需的库和数据集: ```python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # 加载鸢尾花数据集 iris = datasets.load_iris() X, y = iris.data, iris.target ``` 接着,将数据集分为训练集和测试集: ```python # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 然后,使用SVM进行训练和预测: ```python # 创建SVM分类器 clf = SVC(kernel='linear', C=1) # 训练模型 clf.fit(X_train, y_train) # 预测测试集 y_pred = clf.predict(X_test) ``` 最后,计算模型的准确率: ```python # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print("Accuracy:", accuracy) ``` 完整的代码如下: ```python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # 加载鸢尾花数据集 iris = datasets.load_iris() X, y = iris.data, iris.target # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建SVM分类器 clf = SVC(kernel='linear', C=1) # 训练模型 clf.fit(X_train, y_train) # 预测测试集 y_pred = clf.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print("Accuracy:", accuracy) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值