当前位置:   article > 正文

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

南理工数据挖掘作业

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

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

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++;

                                  }

                 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/713482
推荐阅读
相关标签
  

闽ICP备14008679号