南理工数据挖掘大作业(SyskillWebert)

本文详细介绍了使用SyskillWebert进行数据挖掘的大作业,包括数据认知、预处理、朴素贝叶斯分类器和决策树的算法分析与实现。数据预处理中,通过选取关键词并提取特征向量,再运用朴素贝叶斯和决策树进行分类。实验结果显示,朴素贝叶斯在时间和精度上优于未剪枝的决策树。
摘要由CSDN通过智能技术生成

这么大的字都看不见我就没办法了。

全部代码及完整版实验报告下载地址:

https://download.csdn.net/download/qq_33614902/10442074

代码运行方法:打开eclipse-->File-->import-->General-->Existing Projects into Workspace-->Select root directory-->Finish。

注意:导入前请关闭其他项目,否则可能导入失败。

1 认知数据

这次的实验内容来源于一个应用问题。我们希望挖掘现有的网页内容和用户评级,以预测出其他网页的用户评级。数据集中一共有327个样本,每个样本包含1个的网页源代码和1个用户评级。数据集分为两部分,一部分包含287个样本,作为训练集;另一部分包含40个样本,作为测试集。最终的目的是改进学得模型,提高其预测的准确率。

2 数据预处理

网页中正面或者负面的关键词对网页的评级有很大影响。程序中构造了一种将网页的HTML源转换成0、1特征向量的函数,每个属性都有一个值,该值指示一个特定的关键词是否存在(如果存在则为1,不存在则为0)。

2.1 选取关键词

简单的来说,一个经常出现在评级为hot页面上的关键词很少出现在评级为cold的页面上;反之亦然。我们通过计算信息增益的方式来选取关键词。

具体的计算公式如下:

前人的论文报告表明,当关键词个数在75至150之间时,学到的模型表现最好。

2.2 提取特征向量

关于如何从网页的HTML文件中提取合适的特征向量,具体的做法如下:

1、将选取的关键词存入一个字符串数组String keywords[]中。

2、将HTML文件中的所有字母转换成小写字母,并提取出其中的字符串存入Set<String> set中。(使用Set集合的原因是Set内部采用的是非常高效的平衡检索二叉树:红黑树,插入、查找效率比用其他容器高。)

3、遍历keywords[]中的每个元素,若set集合中存在该元素,对应的特征为1,否则为0。

2.3 代码实现

代码实现部分只给出核心代码,完整代码可参见源代码。

数据预处理的具体实现在Preprocessing.java中。

2.3.1 提取关键词

读取关键字,并存入数组中。

File file = newFile("src/test/load_key");

                    BufferedReader br = newBufferedReader(new FileReader(file));

                    String str = null;

                    while ((str = br.readLine())!= null)

                    {

                           str = str.trim();

                           keywords =str.split(",");

                    }

                    br.close();

2.3.2 处理HTLM文件

对网页的源码做词法分析,并放入set集合中。

Set<String>set_file_word = new HashSet<String>();

             try

             {

                    File file = new File(url);

                    BufferedReader br = newBufferedReader(new FileReader(file));

                    String str = null;

                    while ((str = br.readLine())!= null)

                    {

                           str.trim();

                           str =str.toLowerCase();

                           String f_word ="";

                           for (int i = 0; i< str.length();)

                           {

                                  if(Character.isLetter(str.charAt(i)))

                                  {

                                         f_word= "";

                                         for (;i < str.length();)

                                         {

                                                if(Character.isLetter(str.charAt(i)))

                                                {

                                                       f_word= f_word + str.charAt(i);

                                                       i++;

                                                }else

                                                {

                                                       set_file_word.add(f_word);

                                                       break;

                                                }

                                         }

                                  } else

                                  {

                                         i++;

                                  }

                           }

                    }

2.3.3

  • 13
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值