iris数据集 分类
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数据集 分类相关推荐
- tensorflow2.0莺尾花iris数据集分类|超详细
tensorflow2.0莺尾花iris数据集分类 超详细 直接上代码 #导入模块 import tensorflow as tf #导入tensorflow模块from sklearn import ...
- 支持向量机SVM Iris数据集 分类预测
目录 支持向量机对iris数据集进行分类预测 1. 基础概念 2. 实验步骤与分析 2.1 数据理解 2.2 数据读入 2.3 训练集和测试集划分 2.4 支持向量机 2.5 预测 2.6 ...
- 机器学习实战4-sklearn训练线性回归模型(鸢尾花iris数据集分类)
不贴图都没人看系列.... 线性回归推导: 上图求导部分有误,少些一个转置符号,更正为: 逻辑回归推导: (公式中"ln"和"log"表示一个意思,都是以&qu ...
- 混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集
混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集 目录
- 【统计学习方法】线性可分支持向量机对鸢尾花(iris)数据集进行二分类
本文摘要 · 理论来源:[统计学习方法]第七章 SVM · 技术支持:pandas(读csv).numpy.sklearn.svm.svm思想.matplotlib.pyplot(绘图) · 代码目的 ...
- 【统计学习方法】K近邻对鸢尾花(iris)数据集进行多分类
本文摘要 · 理论来源:[统计学习方法]第三章 K近邻 · 技术支持:pandas(读csv).collections.Counter(统计).numpy.sklearn.neighbors.KNei ...
- 【统计学习方法】感知机对鸢尾花(iris)数据集进行二分类
本文摘要 · 理论来源:[统计学习方法]第二章 感知机 · 技术支持:pandas(读csv).matplotlib(画图).numpy.sklearn.linear_model.Perceptron ...
- 机器学习--Iris数据集的Fisher线性分类以及数据可视化技术的学习
Iris数据集的Fisher线性分类以及数据可视化技术的学习 1.Iris数据集的Fisher线性分类 2.数据可视化技术的学习 1.数据集介绍 2.观看数据前5行 3.特征工程 1.数据清洗 2.数 ...
- sklearn基础篇(三)-- 鸢尾花(iris)数据集分析和分类
后面对Sklearn的学习主要以<Python机器学习基础教程>和<机器学习实战基于scikit-learn和tensorflow>,两本互为补充进行学习,下面是开篇的学习内容 ...
最新文章
- web前端知识点太多_初学web前端,学习方法容易走偏,这是为什么?
- 《算法导论》学习总结 — 13. 第13章 红黑树(2)
- this.getClass()和super.getClass()得到的是同一个类
- C++通过hiredis连接到redis
- 基于ASP.NET Core api 的服务器事件发送
- git clone 指定分支的内容
- wpf之StackPanel布局
- Firefly加入OPEN AI LAB生态计划,推出AI开源主板
- Mat 创建图像的理解
- ua获取手机型号_如何根据 UA 判断手机型号和厂家?
- 论文的中期检查表应该怎么写?
- 【Java】 Java中接口是什么,以及接口的使用和理解
- Spring的配置项aspectj-autoproxy
- 平板app尺寸html5,app界面设计尺寸规范大全
- Led台灯对眼睛好吗?2022双十一不伤眼的护眼灯推荐
- 灰狼优化算法(Grey Wolf Optimizer, GWO)
- 基金净值预测 建模方案 | 大数据+深度学习应用
- 骨架屏-vue3中实现
- $.ajax传递数组的两种方式
- 数字技术使智能视频监控超越传统模拟系统
热门文章
- 【每日早报】2019/06/24
- 我以为我很懂Promise,直到我开始实现Promise/A+规范
- 如何将电脑播放的声音作为麦克风的输出音源
- 修改华为荣耀U8860的官方Rom 之 状态栏透明和下拉通知栏可修改
- android 双卡开发获取sim卡默认数据卡,获取sim卡信息,sim1卡,sim2卡 2G/3G/4G信号强度
- php 跳转时传递post值,PHP重定向与POST数据
- 综合项目三----包裹的旅行
- 01、Vue简易版网易云——项目简介
- 升级到什么能换鸿蒙,想换华为手机选择这5部:最低1599,最高8999,都能升级到鸿蒙...
- mysql having in_mysql:having 用法