ロジスティック回帰ロジスティック回帰をスパーク

1、の概念

ロジスティック回帰は、一般的な分類方法に対応する予測されます。一般化線形回帰の特殊なケースは、結果の確率を予測します。spark.mlロジスティック回帰では、ロジスティック回帰は、2つのバイナリ結果を予測するために使用することができる、

または多重ロジスティック回帰クラスの数の結果を予測するために使用されてもよいです。これら2つのアルゴリズムの間で、この家族のパラメータの選択を使用して、またはセット(デフォルトの自動)のまま、正しい変数推論スパーク。 家族のパラメータは、「多項式」に設定されていることで、バイナリロジスティック回帰の数は、分類のために使用することができます。これは、係数の二組と2つのインターセプトを生成します。
分類問題では、我々は、(正しいか間違っているなど)か、特定のカテゴリの結果を予測してみてください。分類の例としては、電子メールがスパムであるかどうかを判断するために、金融取引が不正であるかどうかを判断します。

2、コード、参照アドレス:https://github.com/asker124143222/spark-demo

パッケージcom.home.spark.ml

輸入org.apache.spark.SparkConf
 輸入org.apache.spark.ml.Pipeline
 輸入org.apache.spark.ml.classification.LogisticRegressionの
 輸入org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
 輸入org.apache.spark.ml .feature。{IndexToString、StringIndexer、VectorIndexer}
 インポートorg.apache.spark.ml.linalg。{ベクトル、ベクトル}
 インポートorg.apache.spark.sql。{データセット、行、SparkSession}

/ **
  * @description:ロジスティック回帰、2つのクラスの予測
  *
  * * /
オブジェクトEx_BinomialLogisticRegression {
  DEFメイン(引数:配列[文字列]):単位 = {
    ヴァルのconf = 新しい SparkConf().setMaster( "[*]ローカル")。setAppName( "スパークミリリットルラベル" 
    ヴァルスパーク = SparkSession.builder()。設定ファイル(conf).getOrCreate()
     // 暗黙的な変換RDDをまたは必要性のSparkSession例DF DSに変換
     // ここにインポート暗黙の変換スパーク・ノートでは、パッケージの名前ではなく、SparkSessionオブジェクト名
    のインポートspark.implicits._

    ヴァルデータ = spark.sparkContext.textFile( "入力/ iris.data.txt" 
      .MAP(_。スプリット( "" ))
      .MAP( => アイリス(
        Vectors.dense(( 0).toDouble、(1).toDouble、(2).toDouble、(3 ).toDouble) 4 ))
      ).ToDF()
    データショー()

    data.createOrReplaceTempView( "アイリス" 

    ヴァルトータルカウント = spark.sql( "SELECT COUNT(*)アイリスから" 
    println( "レコードの数:" + TotalCount.collect()(テイク1を。).mkString)

    // 3つのデータサンプルデータ、負-setosaアイリスがあるので2つの予測、 
    ヴァルspark.sql DFを=( "SELECT * WHEREラベルIRISから!= 'アイリスsetosa'" 
    df.map(R。。=> R(1)+ ":" + R(0))を収集()を取る(10 ).foreach(のprintln)
    println( "フィルタレコード数:" + df.count())


    / * VectorIndexer
    ML法は、決定木やランダム森林の分類性能を向上させます。
    VectorIndexer特徴ベクトルは番号が付けられているデータカテゴリのセット(離散値)特性(インデックスカテゴリがカテゴリの機能を備えて)です。
    それは自動的に特徴が離散値の特徴であるかを決定することができ、それらは番号が付けられ、
    これはmaxCategoriesを提供することによって行われる、特徴ベクトルの特徴が少ない重複値maxCategoriesの数よりもない、0〜K(K <= maxCategories-1)番号を付け替えました。
    特徴量は、(変更が発生していない)付け替えない、連続としてmaxCategoriesより数が大きいほど、特徴量を省略する
    = 5と仮定するmaxCategories、カラムの異なる値未満または5列に等しいことを特徴とする再インデックス付けします
    所定の値が0である場合、それは0と番号付けされ、前記安定度については、それはベクトルスパース性を保証することができ
    デフォルトは20 maxCategoriesです
    * / 
    // 特徴インデックス列と行ラベル変換 
    ヴァルlabelIndexerは= 新しい新しい StringIndexer()。SetInputCol( "ラベル")。SetOutputCol( "indexedLabel" ).fit(DF)
    featureIndexerヴァル = 新しい新しいVectorIndexer()
 //       .setMaxCategories(5)// 5後に設定、異なる特徴値の数が5を超える列であるので、変換は発生しません、全く意味がない 
      (「機能.setInputCol ").setOutputCol(" indexedFeatures」
      .fit(DF)


    // トレーニング(70%)に設定された元データのデータとテストデータ(30%) 
    のValアレイ(trainingData、TESTDATA):配列[データセット[行] = df.randomSplit(アレイ(0.7、0.3 ))

    / **
      * LRモデル
      * SetMaxIterは、反復の最大数(デフォルトは100)を設定し、反復の特定の数は、反復の最大数未満で停止することが
      * SetTolフォールトトレランスセット(デフォルト1E-6)、各反復はエラーを計算し、誤差値が反復回数の増加に伴って減少する誤差未満である場合には、フォールトトレランスが提供され、その後、反復停止
      正の係数(デフォルト0)、主に過剰適合防ぐために、正則の* SetRegParam設定データセットは、過剰適合しやすい特徴次元のほか、小さい場合、正則化係数を大きくすることを検討
      過剰適合を防止するための特性を薄くするためのL1(ラッソ)及びL2(リッジ)、L1、L2:* SetElasticNetParam正則パラダイム比(デフォルト0)、正則2つの方法
      * SetLabelCol [設定]タブの列
      カラムが提供される* SetFeaturesCol
      * SetPredictionCol設定予測可能列
      * SetThreshold二分設定されたしきい値
      * / 
    // ロジスティック回帰パラメータセット 
    ヴァルLR = 新新ロジスティック回帰()。SetLabelCol( "indexedLabel")。SetFeaturesCol( "indexedFeatures" ).setFamily()
      .setMaxIter( 100).setRegParam(0.3).setElasticNetParam(0.8 

    // コンバータ、文字に再変換予測カテゴリ 
    ヴァルlabelConverter = 新新IndexToString()
      .setInputCol( "予測" 
      .setOutputCol( "predectionLabel" 
      .setLabels(labelIndexer.labels)


    // ワークフロー構築 
    ヴァルlrPipelineは= 新しい新しいパイプラインを()。SetStages(アレイ(labelIndexer、featureIndexer、LR、labelConverter))

    // 生成されたモデル 
    ヴァルモデル= lrPipeline.fit(trainingData)

    // 予想 
    ヴァル結果= model.transform(TESTDATA)

    // 結果を印刷 
    result.show(200、

    // モデル評価、予測精度とエラー率 
    ヴァル評価者= 新新 MulticlassClassificationEvaluator()。SetLabelCol( "indexedLabel")。SetPredictionCol( "予測" 
    ヴァルlrAccuracy:ダブル = evaluator.evaluate(結果)

    println( "テストエラー=" +(1.0 - lrAccuracy))

    spark.stop()
  }
}


ケースの クラスアイリス(機能:ベクトル、ラベル:文字列)

3、結果

+ ----------------- + --------------- + ------------ +  - ----------------- + -------------------------------- ------------ + ------------------------------------- --- + ---------- + --------------- +
|機能|ラベル| indexedLabel | indexedFeatures | rawPrediction |確率|予測| predectionLabel |
+ ----------------- + --------------- + ------------ +  - ----------------- + -------------------------------- ------------ + ------------------------------------- --- + ---------- + --------------- +
| [4.9,2.4,3.3,1.0] |アイリス・ベルシカラー| 0.0 | [4.9,3.0,3.3,0.0] | [1.0071037675553336、-1.0071037675553336] | [0.7324529695042751,0.2675470304957249] | 0.0 |アイリス・ベルシカラー|
| [5.0,2.0,3.5,1.0] |アイリス・ベルシカラー| 0.0 | [5.0,0.0,3.5,0.0] | [0.938177922699384、-0.938177922699384] | [0.7187314594034615,0.2812685405965385] | 0.0 |アイリス・ベルシカラー|
| [5.6,2.5,3.9,1.1] |アイリス・ベルシカラー| 0.0 | [5.6,4.0,3.9,1.0] | [0.7107814076350716、-0.7107814076350716] | [0.6705737993354417,0.3294262006645583] | 0.0 |アイリス・ベルシカラー|
| [5.6,2.9,3.6,1.3] |アイリス・ベルシカラー| 0.0 | [5.6,8.0,3.6,3.0] | [0.6350805242141693、-0.6350805242141693] | [0.6536405613705153,0.3463594386294846] | 0.0 |アイリス・ベルシカラー|
| [5.8,2.7,4.1,1.0] |アイリス・ベルシカラー| 0.0 | [5.8,6.0,4.1,0.0] | [0.7314003881315354、-0.7314003881315354] | [0.6751125028597408,0.32488749714025916] | 0.0 |アイリス・ベルシカラー|
| [6.1,2.8,4.7,1.2] |アイリス・ベルシカラー| 0.0 | [6.1,7.0,4.7,2.0] | [0.34553320285886、-0.34553320285886] | [0.5855339747983552,0.41446602520164466] | 0.0 |アイリス・ベルシカラー|
| [6.2,2.2,4.5,1.5] |アイリス・ベルシカラー| 0.0 | [6.2,1.0,4.5,5.0] | [0.14582457165756946、-0.14582457165756946] | [0.5363916772629104,0.46360832273708963] | 0.0 |アイリス・ベルシカラー|
| [6.4,2.9,4.3,1.3] |アイリス・ベルシカラー| 0.0 | [6.4,8.0,4.3,3.0] | [0.39384006721834597、-0.39384006721834597] | [0.597206774507057,0.40279322549294305] | 0.0 |アイリス・ベルシカラー|
| [6.6,3.0,4.4,1.4] |アイリス・ベルシカラー| 0.0 | [6.6,9.0,4.4,4.0] | [0.2698323194379575、-0.2698323194379575] | [0.5670517391689078,0.43294826083109217] | 0.0 |アイリス・ベルシカラー|
| [6.7,3.0,5.0,1.7] |アイリス・ベルシカラー| 0.0 | [6.7,9.0,5.0,7.0] | [-0.20557969118713126,0.20557969118713126] | [0.44878532413929256,0.5512146758607075] | 1.0 |アイリス、virginicaの|
| [6.7,3.1,4.4,1.4] |アイリス・ベルシカラー| 0.0 | [6.7,10.0,4.4,4.0] | [0.2698323194379575、-0.2698323194379575] | [0.5670517391689078,0.43294826083109217] | 0.0 |アイリス・ベルシカラー|
| [7.0,3.2,4.7,1.4] |アイリス・ベルシカラー| 0.0 | [7.0,11.0,4.7,4.0] | [0.16644355215403328、-0.16644355215403328] | [0.5415150896404186,0.4584849103595813] | 0.0 |アイリス・ベルシカラー|
| [4.9,2.5,4.5,1.7] |アイリス-virginicaの| 1.0 | [4.9,4.0,4.5,7.0] | [-0.033265079047257284,0.033265079047257284] | [0.49168449702809164,0.5083155029719083] | 1.0 |アイリス-virginicaの|
| [5.4,3.0,4.5,1.5] |アイリス・ベルシカラー| 0.0 | [5.4,9.0,4.5,5.0] | [0.14582457165756946、-0.14582457165756946] | [0.5363916772629104,0.46360832273708963] | 0.0 |アイリス・ベルシカラー|
| [5.6,2.8,4.9,2.0] |アイリス-virginicaの| 1.0 | [5.6,7.0,4.9,10.0] | [-0.43975124481639627,0.43975124481639627] | [0.39180024423019144,0.60819975576​​98086] | 1.0 |アイリス-virginicaの|
| [5.6,3.0,4.1,1.3] |アイリス・ベルシカラー| 0.0 | [5.6,9.0,4.1,3.0] | [0.4627659120742955、-0.4627659120742955] | [0.6136701219061476,0.38632987809385244] | 0.0 |アイリス・ベルシカラー|
| [5.8,2.7,3.9,1.2] |アイリス・ベルシカラー| 0.0 | [5.8,6.0,3.9,2.0] | [0.6212365822826582、-0.6212365822826582] | [0.6504997376392441,0.34950026236075604] | 0.0 |アイリス・ベルシカラー|
| [5.8,2.7,5.1,1.9] |アイリス-virginicaの| 1.0 | [5.8,6.0,5.1,9.0] | [-0.419132264319932,0.419132264319932] | [0.3967244102962335,0.6032755897037665] | 1.0 |アイリス-virginicaの|
| [5.9,3.0,5.1,1.8] |アイリス-virginicaの| 1.0 | [5.9,9.0,5.1,8.0] | [-0.32958743896751885,0.32958743896751885] | [0.4183410089972438,0.5816589910027563] | 1.0 |アイリス-virginicaの|
| [6.0,2.9,4.5,1.5] |アイリス・ベルシカラー| 0.0 | [6.0,8.0,4.5,5.0] | [0.14582457165756946、-0.14582457165756946] | [0.5363916772629104,0.46360832273708963] | 0.0 |アイリス・ベルシカラー|
| [6.1,3.0,4.6,1.4] |アイリス・ベルシカラー| 0.0 | [6.1,9.0,4.6,4.0] | [0.20090647458200817、-0.20090647458200817] | [0.5500583546439539,0.4499416453560461] | 0.0 |アイリス・ベルシカラー|
| [6.2,3.4,5.4,2.3] |アイリス-virginicaの| 1.0 | [6.2,13.0,5.4,13.0] | [-0.8807003330135101,0.8807003330135101] | [0.29303267372325625,0.7069673262767437] | 1.0 |アイリス-virginicaの|
| [6.7,3.1,4.7,1.5] |アイリス・ベルシカラー| 0.0 | [6.7,10.0,4.7,5.0] | [0.07689872680162013、-0.07689872680162013] | [0.5192152136737482,0.48078478632625177] | 0.0 |アイリス・ベルシカラー|
| [6.7,3.3,5.7,2.5] |アイリス-virginicaの| 1.0 | [6.7,12.0,5.7,15.0] | [-1.163178751002261,1.163178751002261] | [0.23809016943453823,0.7619098305654617] | 1.0 |アイリス-virginicaの|
| [6.8,3.0,5.5,2.1] |アイリス-virginicaの| 1.0 | [6.8,9.0,5.5,11.0] | [-0.7360736047366578,0.7360736047366578] | [0.32386333429517283,0.6761366657048272] | 1.0 |アイリス-virginicaの|
| [6.9,3.1,5.4,2.1] |アイリス-virginicaの| 1.0 | [6.9,10.0,5.4,11.0] | [-0.7016106823086834,0.7016106823086834] | [0.33145521561995817,0.6685447843800418] | 1.0 |アイリス-virginicaの|
| [7.2,3.6,6.1,2.5] |アイリス-virginicaの| 1.0 | [7.2,14.0,6.1,15.0] | [-1.3010304407141597,1.3010304407141597] | [0.21399164655179387,0.7860083534482062] | 1.0 |アイリス-virginicaの|
| [7.7,2.8,6.7,2.0] |アイリス-virginicaの| 1.0 | [7.7,7.0,6.7,10.0] | [-1.0600838485199424,1.0600838485199424] | [0.2572934314622856,0.7427065685377143] | 1.0 |アイリス-virginicaの|
| [7.7,3.0,6.1,2.3] |アイリス-virginicaの| 1.0 | [7.7,9.0,6.1,13.0] | [-1.1219407900093334,1.1219407900093334] | [0.24565146441425778,0.7543485355857422] | 1.0 |アイリス-virginicaの|
| [7.9,3.8,6.4,2.0] |アイリス-virginicaの| 1.0 | [7.9,15.0,6.4,10.0] | [-0.9566950812360182,0.9566950812360182] | [0.2775403823663211,0.7224596176336789] | 1.0 |アイリス-virginicaの|
+ ----------------- + --------------- + ------------ +  - ----------------- + -------------------------------- ------------ + ------------------------------------- --- + ---------- + --------------- +

テストエラー= 0.03314285714285714

おすすめ

転載: www.cnblogs.com/asker009/p/12176982.html