以上是本次使用的贝叶斯数据表,本次实验我不会介绍算法,只提供实验要求及代码
――分类算法实现
一、实验题目
分类算法实现
二、实验内容
现有西瓜挑选数据文件: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");
isgreet_count_yes++;
isgreet_count_no++;
qinglv_yes++;
qinglv_no++;
shaojuan_yes++;
shaojuan_no++;
zhuoxiang_yes++;
zhuoxiang_no++;
qingxi_yes++;
qingxi_no++;
aoxian_yes++;
aoxian_no++;
yinghua_yes++;
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++){
}
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