日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Java机器学习库ML之八关于模型迭代训练的试验

發(fā)布時(shí)間:2025/4/16 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java机器学习库ML之八关于模型迭代训练的试验 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前文提到因?yàn)閿?shù)據(jù)集過大,只能拆分然后依次迭代訓(xùn)練,實(shí)驗(yàn)發(fā)現(xiàn)對結(jié)果有所偏差,參考代碼如下:

package com.vip;import java.io.File; import java.util.Map;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.sampling.Sampling; import net.sf.javaml.tools.data.FileHandler;public class VIPClassifer {public static void main(String[] args)throws Exception { if (args.length != 1) {System.err.println("Usage: 請輸入路徑。。。");System.exit(2);} //第一步:迭代加載樣本并采樣和訓(xùn)練模型Sampling s = Sampling.SubSampling; Classifier knn = new KNearestNeighbors(2); Dataset ds_validate=new DefaultDataset(); for(int i=0;i<=11;i++){//分成11份 String filePath=args[0]+"/sam_"+String.format("%02d", i); Dataset ori_data = FileHandler.loadDataset(new File(filePath), 12, "\\s+"); //前面12列是訓(xùn)練特征,最后1列標(biāo)記 //抽樣訓(xùn)練集和驗(yàn)證集 Pair<Dataset, Dataset> sam_data = s.sample(ori_data, (int) (ori_data.size() * 0.9)); knn.buildClassifier(sam_data.x());//樣本集追加訓(xùn)練 for(Instance inst:sam_data.y()){//加入驗(yàn)證集 ds_validate.add(inst); } System.out.println("訓(xùn)練完成第"+String.valueOf(i)+"份樣本集"); }//第二步:利用驗(yàn)證集驗(yàn)證模型System.out.println("開始驗(yàn)證。。。");int correct = 0, wrong = 0;for (Instance inst : ds_validate) {Object predictedClassValue = knn.classify(inst);Object realClassValue = inst.classValue();if (predictedClassValue.equals(realClassValue)) correct++;else wrong++;}System.out.println("Correct predictions " + correct);System.out.println("Wrong predictions " + wrong);//基于訓(xùn)練出的模型預(yù)測System.out.println("開始測試。。。");Dataset out_data = new DefaultDataset(); for(int i=0;i<=59;i++){//分成59份 String filePath=args[0]+"/lim_"+String.format("%02d", i);//加載測試集,前面13列是訓(xùn)練特征,最后2列是uid和spuid聯(lián)合標(biāo)識Dataset pre_data = FileHandler.loadDataset(new File(filePath),"\\s+");for(Instance inst:pre_data){double[] values = new double[12]; for(int j=0;j<11;j++) values[j]=inst.value(j);values[11]=inst.value(12);//第12列不參與訓(xùn)練Instance pre_inst = new DenseInstance(values); //無標(biāo)記,12列特征參與訓(xùn)練Map<Object,Double> classProb=knn.classDistribution(pre_inst);//獲取類別概率double[] pprob=new double[]{classProb.get("1")};//獲取正例的概率Instance out_inst = new DenseInstance(pprob); //輸出out_data.add(out_inst);System.out.println("測試完成第"+String.valueOf(i)+"份樣本集"); }}//輸出u_Id+spu_id+action_typeFileHandler.exportDataset(out_data, new File(args[0]+"/output.txt"));} }

代碼執(zhí)行結(jié)果就是驗(yàn)證集發(fā)現(xiàn),共有10萬驗(yàn)證集,只有2個(gè)是正確的,具體原因不知道,可見通過拆分訓(xùn)練集來訓(xùn)練的方法似乎不可行。

另外發(fā)現(xiàn)處理特別慢,尤其是單條記錄驗(yàn)證和預(yù)測時(shí),對于模型訓(xùn)練dataset導(dǎo)入倒是很快,很不解。單條預(yù)測和驗(yàn)證一秒感覺只有幾條,對于幾百條記錄來說,實(shí)在運(yùn)行太久了。這個(gè)不知道ML庫是怎么弄的。

如何解決大樣本集的訓(xùn)練,一個(gè)是python支持比較好,一個(gè)就是spark mlib平臺。

對于學(xué)習(xí)任務(wù)來說,總結(jié)三方面的工作:

1)樣本:均衡采樣、樣本選擇、交叉驗(yàn)證;
? 2)特征:特征挖掘、特征選擇、特征值處理;
? 3)模型:參數(shù)調(diào)優(yōu)、模型選擇、學(xué)習(xí)方法;


總結(jié)

以上是生活随笔為你收集整理的Java机器学习库ML之八关于模型迭代训练的试验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。