日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

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

前文提到因為數據集過大,只能拆分然后依次迭代訓練,實驗發現對結果有所偏差,參考代碼如下:

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);} //第一步:迭代加載樣本并采樣和訓練模型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列是訓練特征,最后1列標記 //抽樣訓練集和驗證集 Pair<Dataset, Dataset> sam_data = s.sample(ori_data, (int) (ori_data.size() * 0.9)); knn.buildClassifier(sam_data.x());//樣本集追加訓練 for(Instance inst:sam_data.y()){//加入驗證集 ds_validate.add(inst); } System.out.println("訓練完成第"+String.valueOf(i)+"份樣本集"); }//第二步:利用驗證集驗證模型System.out.println("開始驗證。。。");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);//基于訓練出的模型預測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列是訓練特征,最后2列是uid和spuid聯合標識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列不參與訓練Instance pre_inst = new DenseInstance(values); //無標記,12列特征參與訓練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"));} }

代碼執行結果就是驗證集發現,共有10萬驗證集,只有2個是正確的,具體原因不知道,可見通過拆分訓練集來訓練的方法似乎不可行。

另外發現處理特別慢,尤其是單條記錄驗證和預測時,對于模型訓練dataset導入倒是很快,很不解。單條預測和驗證一秒感覺只有幾條,對于幾百條記錄來說,實在運行太久了。這個不知道ML庫是怎么弄的。

如何解決大樣本集的訓練,一個是python支持比較好,一個就是spark mlib平臺。

對于學習任務來說,總結三方面的工作:

1)樣本:均衡采樣、樣本選擇、交叉驗證;
? 2)特征:特征挖掘、特征選擇、特征值處理;
? 3)模型:參數調優、模型選擇、學習方法;


總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。