java 鸢尾花分类算法_鸢尾花分类算法实现 java
使用的贝叶斯分类算法实现的,编程语言为java。是我本学期修的数据库与数据挖掘的课程的期末课程作业,算法本身不难,思路理清楚了很简单。
先看看鸢尾花(Iris)数据集(下图为数据集的部分截图),鸢尾花有setosa、Versicolor、Virginica3个类别,数据集中各个类别各50条数据,一共是150条数据记录,每条数据记录的前4个值分别表示鸢尾花的sepalLength、sepalWidth、petalLengthpetalWidth,第5个值是鸢尾花的类型。算法实现过程中将每个类别的前40条记录作为训练数据,进行分类模型的训练,每个类别的后10条数据作为测试数据,对分类模型的准确性进行判断。
算法基本思路:由概率论中先验概率与后验概率的转换公式
可以得到:
设C为鸢尾花类别,F1,F2,F3,F4表示鸢尾花的4个特征,由于
可见,分母与类别没有关系,在分类时不提供判别信息,不作考虑。因此,分类只与分子有关,,又假设F1,F2,F3,F4是相互独立,所以分子等价于:
由于都有P(C)项,所以可以就只计算
即计算各特征分别属于各类别的概率,然后相乘,值最大的则是那个相应的类别。
所以鸢尾花分类的思路为:先分别计算3个类别分别在4个特征上的均值和方差,然后构造相应的概率密度函数,在对测试数据集进行分类的时候,即求4个特征值分别属于类别1的概率然后相乘,属于类别2概率然后相乘,属于类别3的概率然后相乘,再比较这3个概率值的大小,哪个最大则相应的分类哪个类别。
代码涉及到鸢尾花类以及鸢尾花的类型类(鸢尾花类型定义枚举类型),数据的读取类(读取鸢尾花数据集),鸢尾花分类类和概率值的计算类,这里给出鸢尾花分类类的代码:
BayesClassify.java
package com.test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.test.DataReader;
import com.test.Iris;
public class BayesClassify {
static List irisDataSet; //鸢尾花数据集
static List testDataSet;//测试数据集
static List trainingDataSet;//训练数据集
public BayesClassify() {
irisDataSet = new ArrayList();
testDataSet = new ArrayList();
trainingDataSet = new ArrayList();
}
public static void main(String[] args) throws IOException {
DataReader reader = new DataReader();
BayesClassify bayes = new BayesClassify();
irisDataSet = reader.getIrisData();//读取鸢尾花数据集
bayes.prepareTrainingData();//准备训练数据
Calculate calcu = new Calculate();
calcu.CalMV(trainingDataSet);//计算均值、方差
bayes.prepareTestData();//准备测试数据
int n = 0; //分类正确的个数
for(Iris i : testDataSet) {
String type = calcu.CalP(i.getSepalLength(), i.getSepalWidth(), i.getPetalLength(), i.getPetalWidth());//获得分类
System.out.println("原本类别:"+i.getType().getLabel()+"---->最终分类为:"+type);
if(type.equals(i.getType().getLabel())) {
n++;
}
}
//分类的准确率
System.out.println("分类的正确率:"+(double)n/30);
}
public void prepareTrainingData() {
if (irisDataSet.size() == 150) {
trainingDataSet.addAll(irisDataSet.subList(0,40));//将Setosa的前40条加入训练集
trainingDataSet.addAll(irisDataSet.subList(50,90));//将Versicolor的前40条加入训练集
trainingDataSet.addAll(irisDataSet.subList(100,140));//将Virginica的前40条加入训练集
}
}
public void prepareTestData() {
if (irisDataSet.size() == 150) {
testDataSet.addAll(irisDataSet.subList(40,50));//将Setosa的后10条加入测试集
testDataSet.addAll(irisDataSet.subList(90,100));//将Versicolor的后10条加入测试集
testDataSet.addAll(irisDataSet.subList(140,150));//将Virginica的后10条加入测试集
}
}
}
运行结果:
从图上可以看出分类算法的准确率为76.7%
java 鸢尾花分类算法_鸢尾花分类算法实现 java相关推荐
- 【Matlab】智能优化算法_蜻蜓优化算法DA
[Matlab]智能优化算法_蜻蜓优化算法DA 1.背景介绍 2.灵感 3.公式推导 3.1 勘探和开发操作 4.算法流程图 5.文件结构 6.伪代码 7.详细代码及注释 7.1 DA.m 7.2 d ...
- 【Matlab】智能优化算法_蚁狮优化算法ALO
[Matlab]智能优化算法_蚁狮优化算法ALO 1.背景介绍 2.基本思想 3.公式推导 3.1 ALO算法的运算符 3.2 蚂蚁的随机游动 3.3 困在蚂蚁坑里 3.4 修建陷阱 3.5 蚂蚁划向 ...
- 【Matlab】智能优化算法_灰狼优化算法GWO
[Matlab]智能优化算法_灰狼优化算法GWO 1.背景介绍 2.基本思想 2.1 等级制度 2.2 狩猎方式 3.公式推导 3.1 社会等级制度 3.2 包围猎物 3.3 包围猎物 3.4 攻击猎 ...
- java knn文本分类算法_使用KNN算法的文本分类.PDF
使用KNN算法的文本分类.PDF 第31 卷 第8 期 计 算 机 工 程 2005 年4 月 Vol.31 8 Computer Engineering April 2005 人工智能及识别技术 文 ...
- svm多分类代码_监督学习——分类算法I
本文是监督学习分类算法的第一部分,简单介绍对样本进行分类的算法,包括 判别分析(DA) 支持向量机(SVM) 随机梯度下降分类(SGD) K近邻分类(KNN) 朴素贝叶斯分类(NaiveBayes) ...
- k近邻算法_机器学习分类算法之k近邻算法
本编文章将介绍机器学习入门算法-k近邻算法,将会用demo演示机器学习分类算法. 在先介绍算法时,先回顾分类和回归的区别.像文章分类识别也是这样处理的,如1代表体育,2代表科技,3代表娱乐属于分类问题 ...
- 时间序列分类算法_时间序列分类算法简介
时间序列分类算法 A common task for time series machine learning is classification. Given a set of time serie ...
- Scikit-learn_分类算法_支持向量机分类
一.描述 支持向量机的基本原理是找到一个将所有数据样本分隔成两部分的超平面,使所有样本到这个超平面的累计距离最短. 超平面是指n维线性空间中维度为n-1的子空间.例如,在二维平面中,一维的直线可以将二 ...
- java实现一个感知机_感知机学习算法Java实现
感知机学习算法Java实现. Perceptron类用于实现感知机, 其中的perceptronOriginal()方法用于实现感知机学习算法的原始形式: perceptronAnother()方法用 ...
最新文章
- ricker 子波matlab,毕设求助!!!雷克子波合成地震信号
- 基与datatable的分页
- Scaffolding Template on Asp.Net Core Razor Page
- Linux 设备驱动开发思想 —— 驱动分层与驱动分离
- 正则基础之——非捕获组
- 新概念51单片机C语言教程纠错(2)
- [LeetCode-JAVA] Remove Duplicates from Sorted Array II
- 接口接收数据_你知道RS232与RS485接口的区别吗?
- 解决Win7 64位安装 Microsoft .NET Framework 4 失败的情况
- ug建模减速器_UG NX一级减速器整体建模
- vsCode 快速生成vue 模板
- 我们毕生的使命,就是要造就另一个人-《程序开发心理学》读后感
- sd卡卡槽_SD卡面包板插槽DIY图解
- 玉米社:sem竞价推广如何选择投放时间、投放地域
- LuaAuxLib 按键精灵lua库
- 微信公众平台接口程序语音天气
- Solidity 基础(一)
- Z-score 和 标准正态分布的关系
- 老大难的 Java ClassLoader 再不理解就老了
- 外贸公司邮箱怎么申请?往国外邮箱发邮件哪个好用?