1.向量机

from sklearn import svm#svm函数需要的
import numpy as np#numpy科学计算库
from sklearn import model_selection
import matplotlib.pyplot as plt#如果想要好的结果需要进行参数的调整,同时选取的用于训练的参数也可以增加到四个(本文用了前两个)#数据每一行一个鸢尾花的观察结果,前四个数据代表鸢尾花的生物属性比如大小等,
#最后一个数据是鸢尾花的类别,共三类。主要是对最后这个类别进行处理。
#–IrisSetosa
#–IrisVersicolour
#–IrisVirginica#定义一个函数,将三个类别分别与三个不同数字相对应
def iris_type(s):it={b'Iris-setosa':0,b'Iris-versicolor':1,b'Iris-virginica':2}return it[s]#导入数据
path ='C:/Users/HP/Desktop/模式识别大作业/IRIS/1.txt'  # 之前保存的文件路径
data = np.loadtxt(path,                          # 路径dtype=float,                   # 数据类型delimiter=',',                 # 数据以什么分割符号分割数据converters={4: iris_type})     # 对某一列数据(第四列)进行某种类型的转换()#将原始数据分成训练集和测试集
X,y=np.split(data,(4,),axis=1)
x=X[:,0:2]
y=y.reshape((-1))
x_train,x_test,y_train,y_test=model_selection.train_test_split(x,y,random_state=1,test_size=0.3)
#np.split按照列(axis=1)进行分割,从第四列开始往后的作y数据,之前作为X数据。
#在X中我们取前两列作为特征(为了后面的可视化)。
#用train_test_split将数据分为训练集和测试集,测试集占总数据的30%(test_size=0.3),random_state是随机数种子
#(随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。
#比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
#随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。)#搭建模型选择不同的核函数可能有不同的效果poly rbf sigmo idlinear
clf = svm.SVC(kernel='rbf',                      # 核函数gamma=0.1,decision_function_shape='ovo',     # one vs one 分类问题C=0.8)
clf.fit(x_train, y_train)#输出训练集的准确率
print(clf.score(x_train,y_train))#原始结果与训练集预测结果进行对比
y_train_hat=clf.predict(x_train)
y_train_1d=y_train.reshape((-1))
#zip把原始结果和预测结果放在一起
comp=zip(y_train_1d,y_train_hat)
print(list(comp))
print(clf.score(x_test,y_test))#训练好的模型对测试集的数据进行预测
y_test_hat=clf.predict(x_test)
y_test_1d=y_test.reshape((-1))
comp=zip(y_test_1d,y_test_hat)
print(list(comp))
#print(clf.score(x_test,y_test))#图像进行可视化左图为训练数据,右图为对训练数据的预测
plt.figure()
plt.subplot(121)
plt.scatter(x_train[:,0],x_train[:,1],c=y_train.reshape((-1)),edgecolors='k',s=50)plt.subplot(122)
plt.scatter(x_train[:,0],x_train[:,1],c=y_train_hat.reshape((-1)),edgecolors='k',s=50)
plt.show()

修改不同的核函数会有不同的结果

准确率 0.8380952380952381

2.贝叶斯决策

%贝叶斯
clc
clear
data=xlsread('C:/Users/HP/Desktop/模式识别大作业/IRIS/iris.csv');
Iris1=data(1:50,1:4);
Iris2=data(51:100,1:4);
Iris3=data(101:150,1:4);
%类均值向量
m1 = mean(Iris1);
m2 = mean(Iris2);
m3 = mean(Iris3);%各类内离散度矩阵
s1 = zeros(4);
s2 = zeros(4);
s3 = zeros(4);
for i=1:1:30s1 = s1 + (Iris1(i,:) - m1)'*(Iris1(i,:) - m1);
end
for i=1:1:30s2 = s2 + (Iris2(i,:) - m2)'*(Iris2(i,:) - m2);
end
for i=1:1:30s3 = s3 + (Iris3(i,:) - m3)'*(Iris3(i,:) - m3);
end%总类内离散矩阵
sw12 = s1 + s2;
sw13 = s1 + s3;
sw23 = s2 + s3;
%投影方向
w12 = ((sw12^-1)*(m1 - m2)')';
w13 = ((sw13^-1)*(m1 - m3)')';
w23 = ((sw23^-1)*(m2 - m3)')';
%判别函数以及阈值T(即w0)
T12 = -0.5 * (m1 + m2)*inv(sw12)*(m1 - m2)';
T13 = -0.5 * (m1 + m3)*inv(sw13)*(m1 - m3)';
T23 = -0.5 * (m2 + m3)*inv(sw23)*(m2 - m3)';%% 请补充输出判别函数%% 请给下面代码添加必要注释
kind1 = 0;
kind2 = 0;
kind3 = 0;
newiris1=[];
newiris2=[];
newiris3=[];
for i=31:50x = Iris1(i,:);g12 = w12 * x' + T12;g13 = w13 * x' + T13;g23 = w23 * x' + T23;if((g12 > 0)&(g13 > 0))newiris1=[newiris1;x];kind1=kind1+1;elseif((g12 < 0)&(g23 > 0))newiris2=[newiris2;x];elseif((g13 < 0)&(g23 < 0))newiris3=[newiris3;x];end
end
for i=31:50x = Iris2(i,:);g12 = w12 * x' + T12;g13 = w13 * x' + T13;g23 = w23 * x' + T23;if((g12 > 0)&(g13 > 0))newiris1=[newiris1;x];elseif((g12 < 0)&(g23 > 0))kind2=kind2+1;newiris2=[newiris2;x];elseif((g13 < 0)&(g23 < 0))newiris3=[newiris3;x];end
end
for i=31:50x = Iris3(i,:);g12 = w12 * x' + T12;g13 = w13 * x' + T13;g23 = w23 * x' + T23;if((g12 > 0)&(g13 > 0))newiris1=[newiris1;x];elseif((g12 < 0)&(g23 > 0))newiris2=[newiris2;x];elseif((g13 < 0)&(g23 < 0))kind3=kind3+1;newiris3=[newiris3;x];end
endcorrect=(kind1+kind2+kind3)/60;
fprintf('\n综合正确率:%.2f%%\n\n',correct* 100);

综合正确率:96.67%

3.决策树

#决策树分析   iris_data分为70%的训练,30%的进行预测 然后进行优化 输出准确率、召回率等
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris #导入数据集irisfrom sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn import metricsiris = load_iris() #载入数据集
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target, test_size=0.3)
clf = DecisionTreeClassifier()
clf.fit(x_train,y_train)
predict_target = clf.predict(x_test)print(sum(predict_target == y_test)) #预测结果与真实结果比对
print(metrics.classification_report(y_test,predict_target))
print(metrics.confusion_matrix(y_test,predict_target))L1 = [n[0] for n in x_test]
L2 = [n[1] for n in x_test]
plt.scatter(L1,L2, c=predict_target,marker='x')
plt.title('DecisionTreeClassifier')
plt.show()

4.fisher准则

#fisher准则
#导入包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 导入数据集
df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', header=0)Iris1 = df.values[0:50, 0:4]
Iris2 = df.values[50:100, 0:4]
Iris3 = df.values[100:150, 0:4]# 定义类均值向量
m1 = np.mean(Iris1, axis=0)
m2 = np.mean(Iris2, axis=0)
m3 = np.mean(Iris3, axis=0)# 定义类内离散度矩阵
s1 = np.zeros((4, 4))
s2 = np.zeros((4, 4))
s3 = np.zeros((4, 4))
for i in range(0, 30, 1):a = Iris1[i, :] - m1a = np.array([a])b = a.Ts1 = s1 + np.dot(b, a)
for i in range(0, 30, 1):c = Iris2[i, :] - m2c = np.array([c])d = c.Ts2 = s2 + np.dot(d, c)# s2=s2+np.dot((Iris2[i,:]-m2).T,(Iris2[i,:]-m2))
for i in range(0, 30, 1):a = Iris3[i, :] - m3a = np.array([a])b = a.Ts3 = s3 + np.dot(b, a)# 定义总类内离散矩阵
sw12 = s1 + s2;
sw13 = s1 + s3;
sw23 = s2 + s3;# 定义投影方向
a = np.array([m1 - m2])
sw12 = np.array(sw12, dtype='float')
sw13 = np.array(sw13, dtype='float')
sw23 = np.array(sw23, dtype='float')
# 判别函数以及阈值T(即w0)
a = m1 - m2
a = np.array([a])
a = a.T
b = m1 - m3
b = np.array([b])
b = b.T
c = m2 - m3
c = np.array([c])
c = c.T
w12 = (np.dot(np.linalg.inv(sw12), a)).T
w13 = (np.dot(np.linalg.inv(sw13), b)).T
w23 = (np.dot(np.linalg.inv(sw23), c)).T
T12 = -0.5 * (np.dot(np.dot((m1 + m2), np.linalg.inv(sw12)), a))
T13 = -0.5 * (np.dot(np.dot((m1 + m3), np.linalg.inv(sw13)), b))
T23 = -0.5 * (np.dot(np.dot((m2 + m3), np.linalg.inv(sw23)), c))
# 计算正确率
kind1 = 0
kind2 = 0
kind3 = 0
newiris1 = []
newiris2 = []
newiris3 = []
for i in range(30, 49):x = Iris1[i, :]x = np.array([x])g12 = np.dot(w12, x.T) + T12g13 = np.dot(w13, x.T) + T13g23 = np.dot(w23, x.T) + T23if g12 > 0 and g13 > 0:newiris1.extend(x)kind1 = kind1 + 1elif g12 < 0 and g23 > 0:newiris2.extend(x)elif g13 < 0 and g23 < 0:newiris3.extend(x)for i in range(30, 49):x = Iris2[i, :]x = np.array([x])g12 = np.dot(w12, x.T) + T12g13 = np.dot(w13, x.T) + T13g23 = np.dot(w23, x.T) + T23if g12 > 0 and g13 > 0:newiris1.extend(x)elif g12 < 0 and g23 > 0:newiris2.extend(x)kind2 = kind2 + 1elif g13 < 0 and g23 < 0:newiris3.extend(x)
for i in range(30, 49):x = Iris3[i, :]x = np.array([x])g12 = np.dot(w12, x.T) + T12g13 = np.dot(w13, x.T) + T13g23 = np.dot(w23, x.T) + T23if g12 > 0 and g13 > 0:newiris1.extend(x)elif g12 < 0 and g23 > 0:newiris2.extend(x)elif g13 < 0 and g23 < 0:newiris3.extend(x)kind3 = kind3 + 1
correct = (kind1 + kind2 + kind3) / 60print('判断出来的综合正确率:', correct * 100, '%')

判断出来的综合正确率: 91.66666666666666 %

iris数据集 分类相关推荐

  1. tensorflow2.0莺尾花iris数据集分类|超详细

    tensorflow2.0莺尾花iris数据集分类 超详细 直接上代码 #导入模块 import tensorflow as tf #导入tensorflow模块from sklearn import ...

  2. 支持向量机SVM Iris数据集 分类预测

    目录 支持向量机对iris数据集进行分类预测 1. 基础概念 2. 实验步骤与分析 2.1  数据理解 2.2  数据读入 2.3  训练集和测试集划分 2.4  支持向量机 2.5  预测 2.6  ...

  3. 机器学习实战4-sklearn训练线性回归模型(鸢尾花iris数据集分类)

    不贴图都没人看系列.... 线性回归推导: 上图求导部分有误,少些一个转置符号,更正为: 逻辑回归推导: (公式中"ln"和"log"表示一个意思,都是以&qu ...

  4. 混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集

    混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集 目录

  5. 【统计学习方法】线性可分支持向量机对鸢尾花(iris)数据集进行二分类

    本文摘要 · 理论来源:[统计学习方法]第七章 SVM · 技术支持:pandas(读csv).numpy.sklearn.svm.svm思想.matplotlib.pyplot(绘图) · 代码目的 ...

  6. 【统计学习方法】K近邻对鸢尾花(iris)数据集进行多分类

    本文摘要 · 理论来源:[统计学习方法]第三章 K近邻 · 技术支持:pandas(读csv).collections.Counter(统计).numpy.sklearn.neighbors.KNei ...

  7. 【统计学习方法】感知机对鸢尾花(iris)数据集进行二分类

    本文摘要 · 理论来源:[统计学习方法]第二章 感知机 · 技术支持:pandas(读csv).matplotlib(画图).numpy.sklearn.linear_model.Perceptron ...

  8. 机器学习--Iris数据集的Fisher线性分类以及数据可视化技术的学习

    Iris数据集的Fisher线性分类以及数据可视化技术的学习 1.Iris数据集的Fisher线性分类 2.数据可视化技术的学习 1.数据集介绍 2.观看数据前5行 3.特征工程 1.数据清洗 2.数 ...

  9. sklearn基础篇(三)-- 鸢尾花(iris)数据集分析和分类

    后面对Sklearn的学习主要以<Python机器学习基础教程>和<机器学习实战基于scikit-learn和tensorflow>,两本互为补充进行学习,下面是开篇的学习内容 ...

最新文章

  1. web前端知识点太多_初学web前端,学习方法容易走偏,这是为什么?
  2. 《算法导论》学习总结 — 13. 第13章 红黑树(2)
  3. this.getClass()和super.getClass()得到的是同一个类
  4. C++通过hiredis连接到redis
  5. 基于ASP.NET Core api 的服务器事件发送
  6. git clone 指定分支的内容
  7. wpf之StackPanel布局
  8. Firefly加入OPEN AI LAB生态计划,推出AI开源主板
  9. Mat 创建图像的理解
  10. ua获取手机型号_如何根据 UA 判断手机型号和厂家?
  11. 论文的中期检查表应该怎么写?
  12. 【Java】 Java中接口是什么,以及接口的使用和理解
  13. Spring的配置项aspectj-autoproxy
  14. 平板app尺寸html5,app界面设计尺寸规范大全
  15. Led台灯对眼睛好吗?2022双十一不伤眼的护眼灯推荐
  16. 灰狼优化算法(Grey Wolf Optimizer, GWO)
  17. 基金净值预测 建模方案 | 大数据+深度学习应用
  18. 骨架屏-vue3中实现
  19. $.ajax传递数组的两种方式
  20. 数字技术使智能视频监控超越传统模拟系统

热门文章

  1. 【每日早报】2019/06/24
  2. 我以为我很懂Promise,直到我开始实现Promise/A+规范
  3. 如何将电脑播放的声音作为麦克风的输出音源
  4. 修改华为荣耀U8860的官方Rom 之 状态栏透明和下拉通知栏可修改
  5. android 双卡开发获取sim卡默认数据卡,获取sim卡信息,sim1卡,sim2卡 2G/3G/4G信号强度
  6. php 跳转时传递post值,PHP重定向与POST数据
  7. 综合项目三----包裹的旅行
  8. 01、Vue简易版网易云——项目简介
  9. 升级到什么能换鸿蒙,想换华为手机选择这5部:最低1599,最高8999,都能升级到鸿蒙...
  10. mysql having in_mysql:having 用法