スパークMLlibバイナリロジスティック回帰--PythonのPython + Spark2.0 + Hadoopの研究ノート

上記コンテンツの一部は、2クラス問題の際に、ロジスティック回帰も一般的な分類です。ロジスティック回帰は、イデオロギー的な分類を達成するためにコアコンテンツとしてシグモイド関数を使用して、MLlibは、ロジスティック回帰で実装されPysparkで導入され使用されました。

最初のステップは:必要なライブラリをインポートします

インポートSYS
時間インポート時間から
インポートパンダのPdとして
PLTとしてインポートmatplotlib.pyplot
pysparkインポートSparkConf、SparkContextから
pyspark.mllib.classificationインポートからはLogisticRegressionWithSGD
pyspark.mllib.regressionインポートLabeledPointのから
NPとしてインポートnumpyの
pyspark.mllib.evaluationインポートBinaryClassificationMetricsから
pyspark.mllib.featureインポートStandardScalerから

ステップ2:(入力データは、特に大きなスパン値、データの正規化操作のために、したがって必要関数StandardScaler()実装を使用して、ロジスティック回帰を使用しているため、前と異なる木をモデル)データの準備を行い

:DEF(RDD、IDX)get_mapping
戻りrdd.map(ラムダフィールド:フィールドを[IDX])。。。異なる()zipWithIndex()collectAsMap()

DEF extract_label(レコード):
ラベル=(レコード[-1])
戻りフロート(ラベル)

:DEF extract_features(フィールド、categoriesMap、featureEnd)
categoryIdx = categoriesMap [フィールド[3]
categoryFeatures = np.zeros(LEN(categoriesMap))
categoryFeatures [categoryIdx] = 1
フィールドにおけるフィールドのnumericalFeatures = [CONVERT_FLOAT(フィールド)[4: featureEnd]]
リターンnp.concatenate((categoryFeatures、numericalFeatures))

デフCONVERT_FLOAT(X):
リターン(0のx ==場合は、他のフロート(x)は"?")

DEF PrepareData(SC):
プリント( "データロード...")
rawDataWithHeader = sc.textFile(パス+ "データ/ train.tsv")
ヘッダ= rawDataWithHeader.first()
RAWDATA = rawDataWithHeader.filter(ラムダX:X =ヘッダ)
RDATA = rawData.map(ラムダX:x.replace( "\" " ""))
行= rData.map(ラムダX:x.split( "\ T"))
印刷("データの数:」+ STR(lines.count()))
プリント( "正規化前:")
categoriesMap = lines.map(ラムダフィールド:フィールド[3])\
。。異なる()zipWithIndex()collectAsMap()
labelRDD =行.MAP(ラムダR:extract_label(R))
featureRDD = lines.map(ラムダR:extract_features(R、categoriesMap、lenの(R) - 1))
iについてfeatureRDD.first(中):
印刷(STR(I)+ " ")、
("")を印刷
:プリント( "正規化後")
stdScaler = StandardScaler(withMean =真、withStd = TRUE).fit(featureRDD)
ScalerFeatureRDD = stdScaler.transform(featureRDD)
ScalerFeatureRDD.firstにおけるiについて():
プリント(STR(I)+」 、 ")、
labelpoint = labelRDD.zip(ScalerFeatureRDD)
labelpointRDD = labelpoint.map(ラムダR:LabeledPoint(R [0]、R [1]))
(trainData、validationData、TESTDATA)= labelpointRDD.randomSplit([8,1 、1])
印刷( "trainData:" + STR(trainData.count())+
"validationData:" + STR(validationData.count())+
"TESTDATA:" + STR(testData.count()))
リターン( trainData、validationData、テストデータ、categoriesMap)

第三段階:モデルトレーニング

DEF PredictData(SC、モデル、categoriesMap):
プリント( "データロード...")
rawDataWithHeader = sc.textFile(パス+ "データ/ test.tsv")
ヘッダ= rawDataWithHeader.first()
RAWDATA = rawDataWithHeader.filter(ラムダX :X =ヘッダ)
RDATA = rawData.map(ラムダX:x.replace( "\" " ""))
行= rData.map(ラムダX:x.split( "\ T"))
プリント("データ"+ STR(lines.count()))の数
:dataRDD = lines.map((R [0]、ラムダR
)extract_features(R、categoriesMap、lenの(R)))
DescDict = {
短命:0" 」、
1 "エバーグリーン"
}
dataRDD.takeのデータの(10):
predictResult = model.predict(データ[1])
印刷( "ウェブ"+ STR(データ[0])+ "\ n" + \
"予測" + STR(predictResult)+ \
"Inllustration:" + DescDict [predictResult] + "\ n" は)

第四工程:モデルを評価する(パラメータnumIterations、ステップサイズ及びminiBatchFraction調整することができます)

DEF evaluateModel(モデル、validationData):
スコア= model.predict(validationData.map(ラムダP:p.features))は
(:フロート(スコア)ラムダスコア)= score.mapスコア
ラベル= validationData.map(ラムダP:P .LABEL)
ラベル= Labels.map(ラムダラベル:フロート(ラベル))
scoreAndLabels = score.zip(ラベル)
メトリック= BinaryClassificationMetrics(scoreAndLabels)
AUC = metrics.areaUnderROC
リターン(AUC)

DEF trainEvaluateModel(trainData、validationData、
numIterations、ステップサイズ、miniBatchFraction)
のstartTime =時間()
モデル= LogisticRegressionWithSGD.train(trainData、numIterations、ステップサイズ、miniBatchFraction)
AUC = evaluateModel(モデル、validationData)
持続時間=時間() -のstartTimeの
印刷( "numIterations =" + STR(numIterations)+ \
"ステップサイズ=" + STR(ステップサイズ)+ \
"miniBatchFraction =" + STR(miniBatchFraction)+ \
"時間=" + STR(持続時間)+ \
"AUC =" + STR (AUC))
リターン(AUC、持続時間、numIterations、ステップサイズ、miniBatchFraction、モデル)

DEF evalParameter(trainData、validationData、evalparm、
numIterationsList、stepSizeList、miniBatchFractionList):
メトリック= [trainEvaluateModel(trainData、validationData、
numIterations、ステップサイズ、miniBatchFraction)
numIterationsListでnumIterationsため
stepSizeListにおけるステップサイズのため
miniBatchFractionListでminiBatchFraction用】
evalparm == "numIterationsなら":
IndexList = numIterationsList [:]
のelif evalparm =="ステップサイズ":
IndexList = stepSizeList [:]
のelif evalparm ==" miniBatchFraction」:
IndexList = miniBatchFractionList [:]
DF = pd.DataFrame(メトリクス、インデックス= IndexList、
列= 【 'AUC'、 '期間'、 'numIterations'、 'ステップサイズ'、「miniBatchFraction」、 'モデル'])
showchart(DF、evalparm、 'AUC'、 '期間'、0.5,0.7)

デフshowchart(DF、evalparm、barData、線データ、yMinの、yMaxの):
斧= DF [barData] .PLOT(種類= 'bar'に、タイトル= evalparm、figsize =(10,6)、伝説= Trueの場合、フォントサイズ= 12 )
ax.set_xlabel(evalparm、フォントサイズ= 12)
ax.set_ylim([yMinの、yMaxの])
ax.set_ylabel(barData、フォントサイズ12)=
AX2 = ax.twinx()
ax2.plot(DF [線データ]を。値、ラインスタイル= ' - '、マーカー= 'O'、線幅= 2.0、色= 'R')
plt.show()

DEF evalAllParameter(trainData、validationData、
numIterationsList、stepSizeList、miniBatchFractionList):
メトリック= [trainEvaluateModel(trainData、validationData、
numIterations、ステップサイズ、miniBatchFraction)
numIterationsListでnumIterationsため
stepSizeListにおけるステップサイズのため
miniBatchFractionListでminiBatchFraction用】
Smetrics =ソート(メトリック、キー=ラムダK:K [0] = TRUE)逆
bestParameter = Smetrics [0]
+プリント(+ STR(bestParameter [2] ":numIterationsベストパラメータ")
"ステップサイズ:" + STR(bestParameter [3])+を
"miniBatchFraction:" + STR(bestParameter [4])+
"AUC =" + STR(bestParameter [0]))
リターンbestParameter [5]

DEF parametersEval(リビング、validationData):
プリント( "numIterations")
evalParameter(リビング、validationData "numIterations"
numIterationsList = [5、15、20、60、100]、
stepSizeList = [10]、
miniBatchFractionList = [1])
プリント( "ステップサイズ")
evalParameter(リビング、validationData "ステップサイズ"
numIterationsList = [100]、
stepSizeList = [10、50、100、200]、
miniBatchFractionList = [1])
印刷( "miniBatchFraction")
evalParameter(リビング、 validationData "miniBatchFraction"
numIterationsList = [100]、
stepSizeList = [100]、
miniBatchFractionList = [0.5、0.8、1])

ステップ5:スパーク関連の設定

デフSetLogger(SC):
ロガー= sc._jvm.org.apache.log4j
logger.LogManager.getLogger( "ORG")。でsetLevel(logger.Level.ERROR)
logger.LogManager.getLogger( "アッカ")。でsetLevel(logger.Level.ERROR)
logger.LogManager.getRootLogger()。でsetLevel(logger.Level.ERROR)

デフSETPATH(SC):
グローバルパス
であればsc.master [0:5] == "ローカル":
パス= "ファイル:/ホーム/ jorlinlee / pythonsparkexample / PythonProject /"
他:
パス= "HDFS://マスター:9000 /ユーザー/ jorlinlee /」

DEF CreateSparkContext()
。CONF = SparkConf()setMaster( "ローカル[*]")setAppName( "LR")。
SC = SparkContext(CONF = CONF)
プリント( "マスタ=" + sc.master)
SetLogger(SC)
SETPATH(SC)
リターン(SC)


sc.stop()

ステップ6:メインプログラムを実行します

もし__name__ == "__main__":
印刷( "RunLogisticRegressionWithSGDBinary")
SC = CreateSparkContext()
"データ準備")、印刷
(trainData、validationData、TESTDATA、categoriesMap)= PrepareData(SC)
trainData.persist(); validationData.persist(); testData.persist()
"評価")、印刷
(AUC、持続時間、numIterationsParm、stepSizeParm、miniBatchFractionParm、モデル)= trainEvaluateModel(trainData、validationData、15、10、0.5)
IF(LEN(sys.argvの)== 2)と(sys.argvの[1] == " - E"):
parametersEval(trainData、validationData)
ELIF(LEN(sys.argvの)== 2)及び(sys.argvの[1] == " - "):
印刷( "ベストパラメータ")
モデル= evalAllParameter(trainData、validationData、
[3、5、

[0.5、0.8、1])
印刷( "試験")
AUC = evaluateModel(モデル、TESTDATA)
プリント( "試験AUC:" + STR(AUC))
プリント( "予測")
PredictData(SC、モデル、categoriesMap)

結果:

予測
データの読み込みを...
data3171の数
Webhttp://www.lynnskitchenadventures.com/2009/04/homemade-enchilada-sauce.html
予測:0 Inllustration:はかないです

Webhttp://lolpics.se/18552-stun-grenade-ar
予測:0 Inllustration:はかないです

Webhttp://www.xcelerationfitness.com/treadmills.html
予測:0 Inllustration:はかないです

Webhttp://www.bloomberg.com/news/2012-02-06/syria-s-assad-deploys-tactics-of-father-to-crush-revolt-threatening-reign.html
予測:0 Inllustration:はかないです

Webhttp://www.wired.com/gadgetlab/2011/12/stem-turns-lemons-and-limes-into-juicy-atomizers/
予測:0 Inllustration:はかないです

Webhttp://www.latimes.com/health/boostershots/la-heb-fat-tax-denmark-20111013,0,2603132.story
予測:0 Inllustration:はかないです

Webhttp:?//www.howlifeworks.com/a/a AG_ID = 1186&CID = 7340ci
予測:0 Inllustration:はかないです

Webhttp://romancingthestoveblog.wordpress.com/2010/01/13/sweet-potato-ravioli-with-lemon-sage-brown-butter-sauce/
予測:0 Inllustration:はかないです

Webhttp://www.funniez.net/Funny-Pictures/turn-men-down.html
予測:0 Inllustration:はかないです

Webhttp://youfellasleepwatchingadvd.com/
予測:0 Inllustration:はかないです

おすすめ

転載: www.cnblogs.com/zhuozige/p/12626929.html