Java机器学习库ML之四模型训练和预测示例
基于ML库机器学习的步骤:
1)样本数据导入;
2)样本数据特征抽取和特征值处理(结合模型需要归一化或离散化);这里本文没有做处理,特征选择和特征值处理本身就很大;
3)样本集划分训练集和验证集;
4)根据训练集训练模型;
5)用验证集评价模型;
6)导入测试集,并用模型预测输出预测结果;
package com.vip;import java.io.File;import be.abeel.util.Pair;
import net.sf.javaml.classification.Classifier;
import net.sf.javaml.classification.KNearestNeighbors;
import net.sf.javaml.core.Dataset;
import net.sf.javaml.core.DefaultDataset;
import net.sf.javaml.core.DenseInstance;
import net.sf.javaml.core.Instance;
import net.sf.javaml.featureselection.scoring.GainRatio;
import net.sf.javaml.sampling.Sampling;
import net.sf.javaml.tools.data.FileHandler;public class VIPClassifer {public static void main(String[] args)throws Exception {if (args.length != 2) {System.err.println("Usage: 输入训练集和测试集路径");System.exit(2);}/* Load a data set 前面13列是训练特征,最后1列标记*/Dataset ori_data = FileHandler.loadDataset(new File(args[0]), 13, "\\s+");//特征评分,可独立//GainRatio ga = new GainRatio(); //ga.build(ori_data); /* Apply the algorithm to the data set */ //for (int i = 0; i < ga.noAttributes(); i++) // System.out.println(ga.score(i)); //抽样训练集和验证集Sampling s = Sampling.SubSampling;Pair<Dataset, Dataset> sam_data = s.sample(ori_data, (int) (ori_data.size() * 0.8));/*Dataset train_data = new DefaultDataset();//80%训练Dataset test_data = new DefaultDataset();//20%验证int sample=0;for(Instance inst:ori_data){double[] values = new double[] { inst.value(5),inst.value(6),inst.value(7),inst.value(8), inst.value(9),inst.value(16),inst.value(17)};Instance train_inst = new DenseInstance(values, inst.classValue()); if(sample<4){sample++;train_data.add(train_inst);}else {sample=0;test_data.add(train_inst); } }*///Contruct a KNN classifier that uses 5 neighbors to make a decision.Classifier knn = new KNearestNeighbors(5);knn.buildClassifier(sam_data.x());//验证集int correct = 0, wrong = 0;/* Classify all instances and check with the correct class values */for (Instance inst : sam_data.y()) {Object predictedClassValue = knn.classify(inst);Object realClassValue = inst.classValue();if (predictedClassValue.equals(realClassValue))correct++;elsewrong++;}System.out.println("Correct predictions " + correct);System.out.println("Wrong predictions " + wrong);//模型预测/* Load a data set 前面13列是训练特征,最后2列是uid和spuid联合标识*/Dataset pre_data = FileHandler.loadDataset(new File(args[1]),"\\s+");System.out.println(pre_data.instance(0));Dataset out_data = new DefaultDataset();for(Instance inst:pre_data){double[] values = new double[13]; for(int i=0;i<13;i++) values[i]=inst.value(i);Instance pre_inst = new DenseInstance(values); //无标记,13列特征参与训练Object pre_classvalue = knn.classify(pre_inst);//预测结果//pre_inst.setClassValue(pre_classvalue);//标注预测结果double[] u_spu_id=new double[]{inst.value(13),inst.value(14)};Instance out_inst = new DenseInstance(u_spu_id,pre_classvalue); //带标记out_data.add(out_inst);}//输出u_Id+spu_id+action_typeFileHandler.exportDataset(out_data, new File("/data1/DataFountain/output.txt"));}
}
//java -XX:-UseGCOverheadLimit -Xmx10240m -jar vip.jar train_features_new.txt test_features_new.txt
在上面这个代码框架内,可以用不同模型,如SVM、RF(随机森林)等,也可以对特征值进行处理后选择特征来训练。
Java机器学习库ML之四模型训练和预测示例相关推荐
- Java机器学习库ML之六关于模型迭代训练的思考
我遇到的场景是:样本集有5000万条,接近5个G,那么这样的样本集一次导入训练,我放着一天一夜都没跑出结果,机器性能还特别好,是64位linux有128G内存. 针对这样的情况,我想到的是两种思路: ...
- Java机器学习库ML之一Dataset和Instance
Java机器学习库ML官网:http://java-ml.sourceforge.net/ 对于一个机器学习库来说,最基础就是数据处理能力,ml库给了dataset和instance两个类,datas ...
- Java机器学习库ML之八关于模型迭代训练的试验
前文提到因为数据集过大,只能拆分然后依次迭代训练,实验发现对结果有所偏差,参考代码如下: package com.vip;import java.io.File; import java.util.M ...
- Java机器学习库ML之七分类预测输出概率值
场景:一般分类预测直接输出类别标记,不过有些情况需要输出对应类别的概率值,比如判定为正例的概率是0.6,而判定为负例的概率是0.3,那自然标记为正例,这里就是看ML用classDistribution ...
- Java机器学习库ML之十模型选择准则AIC和BIC
学习任务所建立的模型多数是参数估计并采用似然函数作为目标函数,当训练数据足够多时,可以不断提高模型精度,但是以提高模型复杂度为代价的,同时也带来一个机器学习中非常普遍的问题--过拟合.模型选择问题是在 ...
- Java机器学习库ML之十一线性SVM
线性SVM的原理就不多说了,最强大的就是libsvm库(ml库也是用这个),参考:http://blog.csdn.net/fjssharpsword/article/details/53883340 ...
- Java机器学习库ML之九交叉验证法(Cross Validation)
交叉验证(Cross Validation,CV)是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分 ...
- Java机器学习库ML之二Feature Selection(特征选择)
机器学习中训练模型的前提必备工作就是特征选择,起到降维和降低计算开销的目的,当然在获取尽可能小的特征子集的同时,应不显著降低分类精度.不影响类分布.保持特征子集的稳定适应性强等. ML库提供了特征选择 ...
- Java机器学习库ML之五样本不均衡
样本不均衡的问题是指训练集中类别之间的样本数据量比例失衡.有研究表明,部分学习任务,在类别出现1∶35比例时就会使某些分类学习方法无效,甚至1∶10比例也会.样本不均衡导致的问题有: 1)少数类所包含 ...
最新文章
- stdio.h iostream.h iostream 三者
- 大数据十三五规划将出台 激活相关行业万亿产值
- 发牌一周年 国内5G发展如何?
- noip2016 蚯蚓
- Geotools之“Hello World”——打开本地shp文件并显示
- Kubernetes入门——k8s概念和架构
- iOS底层探索之对象的本质和类的关联特性initIsa(下)
- Atitit 网络协议概论 艾提拉著作 目录 1. 有的模型分七层,有的分四层。我觉得	1 1.1. 三、链接层 确定了0和1的分组方式	1 1.2. 网络层(ip mac转换层	3 1.3. 传输
- DEDECMS短信宝短信插件
- 熬夜整理了一万多字的line-height总结,你还看不懂那我真的要跪了!
- 抖音小程序Tiktok开发教程之 基础组件 04 icon 图标组件
- Java Web入门之网络聊天室
- 优秀的测试工程师应该具备哪些素质
- 印象派绘画在现代艺术发展中的地位和作用
- 微商城如何借势618微信营销?5分钟完成活动策划案
- easyUI 提交按钮linkbutton失效和恢复设置
- 去BAT,你应该要看一看的面试经验总结(转)
- 【SQL语法基础】了解SQL:一门半衰期很长的语言
- 最新彩虹DS版6.1 PJ版源码
- jQuery页面刷新的一些方法
热门文章
- win2003服务器通过ipsec做防火墙的配置方法
- Web安全学习笔记之HTTP协议
- docker多主机网络方案
- 新手入门 keil MDK5 建立STM32工程
- 如何理解c和c ++的复杂类型声明 (转)
- [物理学与PDEs]第3章第2节 磁流体力学方程组 2.4 不可压情形的磁流体力学方程组...
- silverlight 实时更新 marquee效果
- 百度得来的所谓“三层结构”
- 在RHEL7.8上安装配置tomcat
- 创建ROS消息和服务---ROS学习第8篇