美文网首页
机器学习第二次作业实验报告

机器学习第二次作业实验报告

作者: MatrixFK | 来源:发表于2017-03-20 14:30 被阅读251次

<h1 style="text-align:center">机器学习第二次实验作业</h1>
<div style="text-align:center">学号:1412653 姓名:杨立</div>

问题描述

一、Instances类
①读入bank.arff文件,并输出该数据集的样例数,属性数,类别数(注:最后一列为类别属性)
二、filters的相关类
以读入的bank数据集为基础,分别实现以下几个要求:
① 利用Filter类和Discretize类将所有numeric属性(即age和income)离散化,将属性按值平均离散为10段,并且输出离散化的前20个样例;
② 利用Filter类和Normalize类将所有numeric属性(即age和income)归一化,归一的区间为[-1,1],并且输出归一化的前20个样例;
③ 利用Filter类和Remove类删掉第2和第3个属性(即sex和region),并且输出删除第2和第3个属性的前20个样例;
三、classifier的相关类和Evaluation类
①分别采用NaiveBayes,SMO,J48,1NN分类器对bank数据集进行分类,在采用10折交叉验证的情况下,输出分类正确率,观察是否与Weka Explorer面板中调用这4种分类器得到的分类正确率相同(Weka Explorer中同样采用10折交叉验证);
②以U_segmentation_train数据集为训练集,以U_segmentation_test数据集为测试集,分别采用NaiveBayes,SMO,J48,1NN分类器,输出分类正确率,观察是否与Weka Explorer面板中调用这4种分类器得到的分类正确率相同(Weka Explorer中同样采用U_segmentation_test为测试集);
四、选做
①读sample.txt手动生成arff文件
②采用KNN分类器对bank数据集进行分类,验证方式为10折交叉验证,在K分别选1,5,10,30的情况下,输出分类正确率,对这4种输出结果进行比较和分析。

解决方案

1.Instances类

根据提供的api参考,我们只需要按照相同的步骤,获取到Instances类的实例,即可输出bank,arff的数据集的各方面属性。

代码如下:

//将文件转换为Instances类返回    
private static Instances _readFile(String filename) throws Exception{
    FileReader fd = new FileReader(filename);
    return new Instances(fd);
  }

//输出Instances类的基本信息
private static void _base(Instances f){
    System.out.println("样本数目是:" + f.numInstances());
    int numAttributes = f.numAttributes();
    System.out.println("属性数目是:" + numAttributes );
    System.out.println("类别数目是:" + f.numDistinctValues(numAttributes-1) );
}

2.filters的相关类

  • 利用Filter类和Discretize类将所有numeric属性离散化.
    在这里,由于Discretize类只能够离散numeric属性的数据,所以我们没有必要指定需要离散的列,调用设置桶的数据为10,输出结果即可。
    private static void _discretize(Instances f) throws Exception{
    Discretize filter = new Discretize();
    filter.setBins(10);
    filter.setInputFormat(f);
    System.out.println("离散化后的前二十个数据是:");
    _output(f,filter);
    }
  • 对与归一化,同理我们可以得到相同的处理函数
    private static void _normalize(Instances f) throws Exception{
    Normalize filter = new Normalize();
    filter.setScale(1);
    filter.setInputFormat(f);
    System.out.println("归一化后的前二十个数据是:");
    _output(f,filter);
    }
  • 对于删除类,查阅api文档后,也是只需要同样处理即可。
Paste_Image.png

3.classifier的相关类和Evaluation类

  • 分别采用NaiveBayes,SMO,J48,1NN分类器对bank数据集进行分类,在采用10折交叉验证的情况下,输出分类正确率,观察是否与Weka Explorer面板中调用这4种分类器得到的分类正确率相同(Weka Explorer中同样采用10折交叉验证);

为了尽量不重复累赘,我们只列出朴素贝叶斯的结果截图与Explore截图。对于朴素贝叶斯而言,我们只需要创建一个朴素贝叶斯的实例,接着再调用输出函数,输出正确率结果即可。

//朴素贝叶斯验证
private static void _n_bayes_test(Instances f) throws Exception{
    System.out.println("朴素贝叶斯");
    _output_test(new NaiveBayes(),f);
}

/**
 * 输出分类器的验证结果
 * 
 * @param cl 传入的分类器
 * @param f  数据集
 * @throws Exception 
 * */
private static void _output_test(Classifier cl,Instances f) throws Exception{
    //cl.buildClassifier(f);
    Evaluation eval = new Evaluation(f);
    eval.crossValidateModel(cl, f, 10, new Random(1));
    //eval.evaluateModel(cl, f);
    System.out.println(eval.toClassDetailsString());
}

那么对比一下通过函数调用与Explore的结果(截图如下),可发现,结果一致,说明调用成功。

调用函数 Explore

实验结果基本保持一致,所以后面就不再重复列出。

  • 以U_segmentation_train数据集为训练集,以U_segmentation_test数据集为测试集,分别采用NaiveBayes,SMO,J48,1NN分类器,输出分类正确率,观察是否与Weka Explorer面板中调用这4种分类器得到的分类正确率相同(Weka Explorer中同样采用U_segmentation_test为测试集);

在这里,这个问题的解决方法实际上是与上一个问题的方法是类似的。所以我们只需要在函数上稍微修改,即可实现同样的功能。我们同样只举出朴素贝叶斯的例子,更加具体的方法可以参考附件代码。

结果一致,说明实验成功。

选做部分

(1)由txt生成arff

不限制语言,这里我采用脚本语言NodeJs来处理txt文件。

  • step1 将多余的中文删掉得到纯数据部分

     2017.3.1:晴,微风,正午10摄氏度,空气潮湿。适合出行
     2017.3.2: 多云,无风,正午6摄氏度,空气干燥。适合出行
     2017.3.3:下雨,微风,正午8摄氏度,空气潮湿。不适合出行
     2017.3.4: 晴,大风,正午12摄氏度,空气潮湿。适合出行
     2017.3.5: 多云,大风,正午-3摄氏度,空气干燥。不适合出行
    

在不限制语言的使用情况,我们使用脚本语言Nodejs来处理。大致思路是:读入文件数据之后,先根据 '\n' 来将每一段分开,生成一个数组,每一个数组元素是一个句子。大致如下

  $ node util.js
[ ' 2017.3.1:晴,微风,正午10摄氏度,空气潮湿。适合出行\r',
  ' 2017.3.2: 多云,无风,正午6摄氏度,空气干燥。适合出行\r',
  ' 2017.3.3:下雨,微风,正午8摄氏度,空气潮湿。不适合出行\r',
  ' 2017.3.4: 晴,大风,正午12摄氏度,空气潮湿。适合出行\r',
  ' 2017.3.5: 多云,大风,正午-3摄氏度,空气干燥。不适合出行\r',
  '' ]

接着只需要根据 ":",",",“。”来区分具体的信息即可。最后经过处理之后,生成的文件内容如下

@relation  whether
@attribute 'date' string 
@attribute 'advice' string 
@attribute 'whether' string 
@attribute 'wind' string 
@attribute 'temperature' string 
@attribute 'humidity' string 

@data 
'2017.3.1','适合出行','晴','微风','正午10摄氏度','空气潮湿'
'2017.3.2','适合出行',' 多云','无风','正午6摄氏度','空气干燥'
'2017.3.3','不适合出行','下雨','微风','正午8摄氏度','空气潮湿'
'2017.3.4','适合出行',' 晴','大风','正午12摄氏度','空气潮湿'
'2017.3.5','不适合出行',' 多云','大风','正午-3摄氏度','空气干燥'

相关文章

  • 机器学习第二次作业实验报告

    机器学习第二次实验作业 学号:1412653 姓名:杨立 问题描述 一、Instances类①读入bank.ar...

  • Day 46

    实验报告……各种作业……学习进度…… 啊!都要加油了!

  • ~49~

    写不完的实验报告交不完的作业学习使我快乐我爱学习!

  • 2019-11-12

    昨天写了实验报告,今天写了算法作业。

  • 第三节 用户及文件权限管理

    “Linux 基础入门(新版)”实验报告 用户及文件权限管理 Linux基础入门(新版)实验报告 作业操作 sud...

  • 45

    慢慢,慢慢写实验报告; 慢慢,慢慢被作业压倒。

  • 免费报名 | 机器学习的第二次入门(入群有福利)

    机器学习第二次入门 AI科技大本营在线公开课第15期 主题:机器学习第二次入门 时间:9月6日(本周四) 20:0...

  • 内容整理(持续更新)

    机器学习基础 视频教程:吴恩达机器学习-网易云公开课笔记地址:机器学习笔记作业练习:https://github....

  • word2vec

    机器学习课堂作业要做屁屁踢,对word2vec了解了一下 机器学习专题课作业PPT 截图 参考链接汇总 总体介绍:...

  • FPGA 自动售货机大作业

    FPGA大作业实验报告 本实验报告分为实验目标,设计概述,细节详述,常见问题分析,总结,完整代码等部分。 实验目标...

网友评论

      本文标题:机器学习第二次作业实验报告

      本文链接:https://www.haomeiwen.com/subject/mwmbnttx.html