本项目主要是对一些常用的算法的实现,以及基于spark的机器学习算法实现。
目前以实现的功能有:
- 数据预处理
- 基于spark的LR逻辑回归分类
- 基于spark的DT决策树分类
数据预处理主要对算法需要用到的数据进行前期的清洗等操作,其中分词等使用到了HanLP相关的代码。
参考示例代码
由于分词使用到的词典和模型较大,因此未上传到github上,大家可以从HanLP主页下载对应版本的模型数据(具体版本见ml模块的pom.xml配置)
下载完后将data目录解压到ckooc-ml/dictionaries/hanlp目录下即可
目前已实现的功能:
- 分词
- 去除停用词
- 去除英文
- 去除数字
- 词性标注
- 向量化
数据预处理的输入数据为中国新闻网上抓取的数据,分为6个类别体育
,军事
,文化
和经济
. 分为训练文本和测试文本.
输入文件位置:
- 训练文本: data/classnews/train/
- 测试文本: data/classnews/test/
输出经过分词等预处理之后的数据、特征词索引模型、向量模型
模型保存位置:
- 特征词索引模型: models/preprocession/indexModel
- 向量模型: models/preprocession/vecModel
目前主要使用分类算法进行新闻分类,已实现的算法有:
上述所有功能的Demo均在src/main/scala目录下,包含模型训练和测试两部分(注意,分类需要先进行预处理,因此确保事先运行预处理代码,产生了两个预处理模型)
数据类型 数据大小 分类数 训练文本数/per分类 测试文本数/per分类 分类算法 特征维数 准确度
新闻分类数据 457M 13 10000 5000 LR 7000 0.817751203603044
新闻分类数据 457M 13 10000 5000 LR 8000 0.8633949371020345
新闻分类数据 457M 13 10000 5000 LR 10000 0.8678832116788321
新闻分类数据 516M 15 10000 5000 LR 8000 0.7378484249241117
新闻分类数据 571M 16 10000 5000 LR 8000 0.8016991074309066
新闻分类(chinaNews) 683M 2 140000+ 60000+ LR 15000 0.9565125193703613
新闻分类(chinaNews) 1.98G 6 160000+ 70000+ LR 50000 0.8599223781293982
数据类型 数据大小 分类数 训练文本数/per分类 测试文本数/per分类 分类算法 特征维数 Area under ROC
新闻分类(chinaNews) 683M 2 140000+ 60000+ SVM 15000 0.9649445556688644
新闻分类(chinaNews) 587M 2 140000+ 60000+ SVM 15000 0.9421810171886563
说明
- 2分类:国内新闻、国外新闻(683M)/文化、娱乐(587M)
- 6分类:经济、军事、社会、体育、文化、娱乐
- 13分类:公益、健康、交通、教育、经济、军事、历史、农业、时尚、数码、体育、通讯、娱乐