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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于XGBoost的PU-Learning

發(fā)布時間:2024/1/23 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于XGBoost的PU-Learning 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

論文:Detecting positive and negative deceptive opinions using PU-learning

PU-learning是一種只有正樣本的半監(jiān)督的二分類器。在實際工程應(yīng)用中,有時候我們會遇到只有正樣本而沒有負(fù)樣本的分類任務(wù),或者說負(fù)樣本是不純的,即負(fù)樣本中摻雜有部分正樣本。PU-learning提供了一種選擇可靠負(fù)樣本的機制,具體算法如下:

原始的PU-Learning

算法解釋:

????1:先用正樣本(positive)與未標(biāo)注樣本(或者稱作無標(biāo)簽樣本Unlabel)訓(xùn)練分類器

????2:根據(jù)訓(xùn)練得到的分類器對未標(biāo)注樣本進行分類

????3:把分類為負(fù)樣本的樣本作為可靠的負(fù)樣本

????4-14:把剩下的未標(biāo)注樣本與正樣本再訓(xùn)練分類器,不斷重復(fù)1-3過程,直至沒有更多可靠負(fù)樣本

新的PU-Learning

新的PU-Learning在原有的基礎(chǔ)上進行了修正,具體由于看論文出處

基于XGBoost分類器代碼如下:

package org.jmlab.ml
?
import java.io.{File, PrintWriter}
?
import ml.dmlc.xgboost4j.LabeledPoint
import ml.dmlc.xgboost4j.scala.{Booster, DMatrix, XGBoost}
import org.apache.log4j.{LogManager, Logger}
import org.apache.spark.mllib.evaluation.{BinaryClassificationMetrics, MulticlassMetrics}
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.sql.SparkSession
?
/**
? * Created by jmzhou on 2018/9/18.
? */
class GradualReductionPULearner {
?
? val log: Logger = LogManager.getLogger(getClass)
? val prebiThreshold = 0.3f
? var spark: SparkSession = _
? val iterationNum = 20
?
? def loadData(): DMatrix ={
? ? val valid = MLUtils.loadLibSVMFile(spark.sparkContext, "data/data.libsvm")
? ? ? .map(point => {
? ? ? ? LabeledPoint(point.label.toFloat,
? ? ? ? ? point.features.toSparse.indices,
? ? ? ? ? point.features.toSparse.values.map(_.toFloat)
? ? ? ? )
? ? ? }).collect().toIterator
? ? new DMatrix(valid)
? }
?
? def weight(labeledPoints: Array[LabeledPoint]): (Booster, Array[LabeledPoint]) ={
? ? val posPoint = labeledPoints.filter(p => p.label == 1.0)
? ? val init = zeroStep(labeledPoints)
?
? ? var relNegPoint = init._1
? ? var negPoint = init._2
? ? var preNegPoint = negPoint
? ? var classifier: Booster = null
? ? var iterNum = 1
?
? ? val validDMat = loadData()
?
? ? var relNegNum = 0
? ? var stopFlag = false
?
? ? while (negPoint.length <= preNegPoint.length && posPoint.length < relNegPoint.length && !stopFlag){
? ? ? iterNum += 1
? ? ? println("iterNum: " + iterNum)
? ? ? val dmat = new DMatrix((posPoint++relNegPoint).toIterator)
? ? ? val posNum = posPoint.length
? ? ? val negNum = relNegPoint.length
? ? ? classifier = XGBoost.train(dmat, getParamMap(posNum, negNum), iterationNum)
// ? ? ?evaluate(spark, classifier, validDMat)
? ? ? val predict = classifier.predict(new DMatrix(relNegPoint.toIterator)).flatten
? ? ? ? .map(p => if(p > prebiThreshold) 1.0f else 0.0f)
? ? ? preNegPoint = negPoint
? ? ? negPoint = relNegPoint.zip(predict).filter{case(p, l) => l == 0.0f}.map(_._1)
? ? ? relNegPoint = (relNegPoint ++ negPoint).distinct
? ? ? println("posNum: " + posNum)
? ? ? if (relNegNum != relNegPoint.length)
? ? ? ? relNegNum = relNegPoint.length
? ? ? else if (iterNum >= 2)
? ? ? ? stopFlag = true
? ? ? println("relNegPoint: " + relNegNum)
? ? }
? ? (classifier, posPoint++relNegPoint)
? }
?
? def zeroStep(labeledPoints: Array[LabeledPoint]): (Array[LabeledPoint], Array[LabeledPoint]) = {
? ? val posNum = labeledPoints.count(p => p.label == 1.0)
? ? val negNum = labeledPoints.count(p => p.label == 0.0)
? ? val unLabelPoint = labeledPoints.filter(p => p.label == 0.0)
? ? val dmat = new DMatrix(labeledPoints.toIterator)
? ? val classifier = XGBoost.train(dmat, getParamMap(posNum, negNum), iterationNum)
? ? val validDMat = loadData()
// ? ?evaluate(spark, classifier, validDMat)
? ? val predict = classifier.predict(new DMatrix(unLabelPoint.toIterator))
? ? ? .flatten.map(p => if(p > prebiThreshold) 1.0f else 0.0f)
? ? val negPoint = unLabelPoint.zip(predict).filter{case(p, l) => l == 0.0f}.map(_._1)
? ? val relNegPoint = negPoint
? ? (relNegPoint, negPoint)
? }
?
? def getParamMap(posNum: Int, negNum: Int): Map[String, Any] = {
? ? List("eta" -> 0.1f,
? ? ? "scale_pos_weight" -> negNum/posNum.toDouble,
? ? ? "max_depth" -> 5,
? ? ? "silent" -> 0,
? ? ? "objective" -> "binary:logistic",
? ? ? "lambda" -> 2.5,
? ? ? "rate_drop" -> 0.5,
? ? ? "alpha" -> 1
? ? ).toMap
? }
?
? def evaluate(spark: SparkSession, model: Booster, test_dmat: DMatrix): Unit ={
? ? val labels = test_dmat.getLabel.map(_.toDouble)
? ? val predict_xgb = model.predict(test_dmat).flatten
?
? ? val scoreAndLabels = spark.sparkContext.makeRDD(predict_xgb.map(_.toDouble) zip labels)
?
? ? val xgbMetrics = new BinaryClassificationMetrics(scoreAndLabels)
? ? val auROC = xgbMetrics.areaUnderROC()
?
? ? println("xgboost: Area under ROC = " + auROC)
?
? ? val predicts = predict_xgb.map(p => if(p >= prebiThreshold) 1.0 else 0.0)
? ? val predictsAndLabels = spark.sparkContext.makeRDD(predicts zip labels)
?
? ? val roc = xgbMetrics.roc().map{case(fpr, recall) => s"$fpr,$recall"}.collect()
?
? ? val metrics = new MulticlassMetrics(predictsAndLabels)
? ? val confusionMatrix = metrics.confusionMatrix
? ? println("confusionMatrix: ")
? ? println(confusionMatrix)
?
? ? val TP = confusionMatrix.apply(1, 1)
? ? val FP = confusionMatrix.apply(0, 1)
? ? val FN = confusionMatrix.apply(1, 0)
? ? val P = TP/(TP+FP)
? ? val R = TP/(TP+FN)
?
? ? println("P: " + P)
? ? println("R: " + R)
?
? ? val f1 = 2*P*R/(P+R)
?
? ? println("accuracy: " + metrics.accuracy)
? ? println("f1 score: " + f1)
? ? println("class 1 recall: " + metrics.recall(1.0))
? ? println("class 0 recall: " + metrics.recall(0.0))
?
? }
?
}
?

總結(jié)

以上是生活随笔為你收集整理的基于XGBoost的PU-Learning的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美69视频 | 免费人成在线观看网站 | 欧美精品久久久久性色 | 久久久久亚洲av成人毛片韩 | 久久国内精品视频 | 欧美人妖老妇 | 亚洲国产精品女人 | 欧美一区二区三区免费 | 美女视频毛片 | 亚洲国产精彩中文乱码av | 国产又粗又长又黄的视频 | av免费观看入口 | 日韩高清专区 | 亚洲综合成人亚洲 | www视频免费观看 | 不卡日本 | 人人爱人人草 | 日本一区二区三区四区视频 | 亚洲视频欧美 | 激情午夜av | 色欲人妻综合网 | 婷婷在线网 | 插入综合网 | 婷婷.com| 久久九九爱 | 女人被男人操 | 国产午夜在线 | 欧美又大又硬又粗bbbbb | 调教一区| 无码人妻aⅴ一区二区三区玉蒲团 | 偷拍一区二区 | 亚洲欧美日韩久久 | av噜噜色| 操比网站 | 国产亚洲第一页 | 人禽高h交 | 欧美色拍| 天天看天天干 | 国产精品一卡二卡在线观看 | 欧美伦理片 | 日韩第1页 | 欧美精品视 | 国产91专区 | 久久久久看片 | 国产又黄又猛又爽 | 亚洲一区二区免费视频 | 福利视频一区 | 日本精品久久久 | 免费在线观看视频a | 亚洲系列在线 | 天天操天天干天天舔 | 一级伦理农村妇女愉情 | 免费网站在线观看黄色 | 五月天综合网站 | 老湿机69福利区午夜x片 | 亚洲蜜臀av乱码久久精品蜜桃 | 亚洲精品少妇久久久久久 | 嫩草网站在线观看 | 97色伦影院 | 午夜影院在线观看视频 | 136福利视频导航 | 人物动物互动39集免费观看 | 性色一区二区 | 肉嫁高柳在线 | 欧美一区二区三区在线 | 无人在线观看高清视频 | 黄色大片免费看 | 操操综合网 | 欧美性受xxxx黑人xyx性 | 91精品视频免费 | 青青草日韩| 啦啦啦免费高清视频在线观看 | 日本中文在线视频 | 国产午夜电影 | 欧美性免费 | 国产二区av | 一区二区激情 | 亚洲精品一区在线 | 日本午夜大片 | 亚洲人成人| 99精品国产一区 | 性生生活大片又黄又 | av中文字幕网站 | 欧美日韩xxxx | 黄色一二三区 | 国产精品无码免费专区午夜 | 香蕉视频亚洲一级 | 中文综合网 | 日本免费不卡视频 | 视频一区二区三区精品 | 五月婷婷影院 | av无遮挡 | www黄色 | 中文字幕在线视频免费观看 | 97在线播放免费观看 | 午夜在线影院 | 日产mv免费观看 | 伊人222成人综合网 亚洲日本中文 | 天堂素人 |