天天看点

贝叶斯分类算法实现

编号,色泽,根蒂,敲声,纹理,脐部,触感,好瓜  

1,青绿,蜷缩,浊响,清晰,凹陷,硬滑,是  

2,乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,是  

3,乌黑,蜷缩,浊响,清晰,凹陷,硬滑,是  

4,青绿,蜷缩,沉闷,清晰,凹陷,硬滑,是  

5,浅白,蜷缩,浊响,清晰,凹陷,硬滑,是  

6,青绿,稍蜷,浊响,清晰,稍凹,软粘,是  

7,乌黑,稍蜷,浊响,稍糊,稍凹,软粘,是  

8,乌黑,稍蜷,浊响,清晰,稍凹,硬滑,是  

9,乌黑,稍蜷,沉闷,稍糊,稍凹,硬滑,否  

10,青绿,硬挺,清脆,清晰,平坦,软粘,否  

11,浅白,硬挺,清脆,模糊,平坦,硬滑,否  

12,浅白,蜷缩,浊响,模糊,平坦,软粘,否  

13,青绿,稍蜷,浊响,稍糊,凹陷,硬滑,否  

14,浅白,稍蜷,沉闷,稍糊,凹陷,硬滑,否  

15,乌黑,稍蜷,浊响,清晰,稍凹,软粘,否  

16,浅白,蜷缩,浊响,模糊,平坦,硬滑,否  

17,青绿,蜷缩,沉闷,稍糊,稍凹,硬滑,否  

以上是本次使用的贝叶斯数据表,本次实验我不会介绍算法,只提供实验要求及代码

——分类算法实现

一、实验题目

分类算法实现

二、实验内容

现有西瓜挑选数据文件:dataset.txt,编程实现朴素贝叶斯算法,并判断有如下特征的瓜是否好瓜:

青绿,稍蜷,浊响,清晰,凹陷,硬滑。

三、实验目的

1、理解分类算法基本过程

2、熟悉贝叶斯分类算法

2、锻炼分析问题、解决问题并动手实践的能力

四、实验指导

1、自行采用一种语言编程实现算法(注意:计算条件概率、判别分类等核心算法需自己编程实现)

2、用课堂例子进行正确性检验

3、用户界面友好,要考虑到输入输出

4、分析结果,说明理论分析到数值计算的注意问题

代码实验(代码查询数据我是写死了的,只适合初学者阅读,有兴趣也可以尝试修改一下)

package homework;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

public class bys {

static ArrayList<String> list = new ArrayList<String>();

static int count = 0;

public static void main(String[] args){

File file = new File("dataset .txt");

readFile(file);

}

public static void readFile(File file){

float isgreet_count_yes = 0;

float isgreet_count_no = 0;

float qinglv_yes = 0;

float qinglv_no = 0;

int shaojuan_yes = 0;

int shaojuan_no = 0;

int zhuoxiang_yes = 0;

int zhuoxiang_no = 0;

int qingxi_yes = 0;

int qingxi_no = 0;

int aoxian_yes = 0;

int aoxian_no = 0;

int yinghua_yes = 0;

int yinghua_no = 0;

BufferedReader burd = null;

try {

burd = new BufferedReader(new FileReader(file));

String s = null;

ArrayList<String> list1 = new ArrayList<String>();

while((s=burd.readLine())!=null){

count++;

String[] a = s.split(",");

list1.add(a[0]);

list1.add(a[1]);

list1.add(a[2]);

list1.add(a[3]);

list1.add(a[4]);

list1.add(a[5]);

list1.add(a[6]);

list1.add(a[7]+"\n");

if(a[7].equals("是  ")){

isgreet_count_yes++;

}if(a[7].equals("否  ")){

isgreet_count_no++;

}if(a[1].equals("青绿")&&a[7].equals("是  ")){

qinglv_yes++;

}if(a[1].equals("青绿")&&a[7].equals("否  ")){

qinglv_no++;

}if(a[2].equals("稍蜷")&&a[7].equals("是  ")){

shaojuan_yes++;

}if(a[2].equals("稍蜷")&&a[7].equals("否  ")){

shaojuan_no++;

}if(a[3].equals("浊响")&&a[7].equals("是  ")){

zhuoxiang_yes++;

}if(a[3].equals("浊响")&&a[7].equals("否  ")){

zhuoxiang_no++;

}if(a[4].equals("清晰")&&a[7].equals("是  ")){

qingxi_yes++;

}if(a[4].equals("清晰")&&a[7].equals("否  ")){

qingxi_no++;

}if(a[5].equals("凹陷")&&a[7].equals("是  ")){

aoxian_yes++;

}if(a[5].equals("凹陷")&&a[7].equals("否  ")){

aoxian_no++;

}if(a[6].equals("硬滑")&&a[7].equals("是  ")){

yinghua_yes++;

}if(a[6].equals("硬滑")&&a[7].equals("否  ")){

yinghua_no++;

}

}

list.addAll(list1);

} catch (FileNotFoundException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

} catch (IOException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

for(int i=0; i<list.size(); i++){

System.out.print(list.get(i) + "  ");

}

float count_yes_chance = (float) (isgreet_count_yes/17.0);

float qinglv_yes_chance = (float)(qinglv_yes/isgreet_count_yes);

float shaojuan_yes_chance = (float)(shaojuan_yes/isgreet_count_yes);

float zhuoxiang_yes_chance = (float)(zhuoxiang_yes/isgreet_count_yes);

float qingxi_yes_chance = (float)(qingxi_yes/isgreet_count_yes);

float aoxian_yes_chance = (float)(aoxian_yes/isgreet_count_yes);

float yinghua_yes_chence = (float)(yinghua_yes/isgreet_count_yes);

float count_no_chance = (float) (isgreet_count_no/17.0);

float qinglv_no_chance = (float)(qinglv_no/isgreet_count_no);

float shaojuan_no_chance = (float)(shaojuan_no/isgreet_count_no);

float zhuoxiang_no_chance = (float)(zhuoxiang_no/isgreet_count_no);

float qingxi_no_chance = (float)(qingxi_no/isgreet_count_no);

float aoxian_no_chance = (float)(aoxian_no/isgreet_count_no);

float yinghua_no_chence = (float)(yinghua_no/isgreet_count_no);

float p1 = count_yes_chance*qinglv_yes_chance*shaojuan_yes_chance*zhuoxiang_yes_chance

*qingxi_yes_chance*aoxian_yes_chance*yinghua_yes_chence;

float p2 = count_no_chance*qinglv_no_chance*shaojuan_no_chance*zhuoxiang_no_chance

*qingxi_no_chance*aoxian_no_chance*yinghua_no_chence;

System.out.println("\n特征为:青绿,稍蜷,浊响,清晰,凹陷,硬滑,贝叶斯分布后好瓜概率为:" + p1 + ",不是好瓜概率为:" + p2);

if(p1 > p2){

System.out.println("所以该特征的瓜是好瓜!");

}else{

System.out.println("所以该特征的瓜是不是好瓜");

}

}

}

附带实验数据文件https://pan.baidu.com/s/1MP5PbYbHMtA8kSffF9womQ