問題タブ [apache-spark-ml]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
7762 参照

apache-spark - spark.ml StringIndexer が fit() で「見えないラベル」をスローする

おもちゃのspark.ml例を準備しています。、 pyspark、ipython ノートブックSpark version 1.6.0の上で実行されます。Oracle JDK version 1.8.0_65

まず、 Spark、ML、StringIndexer: 目に見えないラベルの処理とはほとんど関係ありません。パイプラインを変換するのではなく、データセットに適合させるときに例外がスローされます。そして、例外を抑制することは、ここでは解決策ではないかもしれません。残念ながら、この場合、データセットがかなりめちゃくちゃになるからです。

私のデータセットは非圧縮で約 800Mb であるため、再現が難しい場合があります (サブセットが小さいほど、この問題を回避できるようです)。

データセットは次のようになります。

予測される値は ですlabel。それに適用されるパイプライン全体:

そして、ここにスタックトレースがあります:

最も興味深い行は次のとおりです。

pl-PLどの列の値がどのように列にlang混同されたのかわかりませんlabelfloatstring。編集されていません: @ zero323 のおかげで修正されたいくつかの性急な結託

さらに詳しく調べたところ、これpl-PLはトレーニングではなく、データセットのテスト部分からの値であることがわかりました。そのため、どこで犯人を探すべきかさえわかりません。それはrandomSplitコードではなくStringIndexer、簡単にコードである可能性があり、他に何があるかは誰にもわかりません。

これを調査するにはどうすればよいですか?

0 投票する
1 に答える
3833 参照

python - params を ML Pipeline.fit メソッドに渡す方法は?

を使用してクラスタリングメカニズムを構築しようとしています

  • Google Dataproc + Spark
  • Google ビッグクエリ
  • Spark ML KMeans+pipeline を使用してジョブを作成する

次のように:


  1. bigquery でユーザー レベル ベースの機能テーブルを作成する
    例: 機能テーブルはどのように表示されるか

    userid |x1 |x2 |x3 |x4 |x5 |x6 |x7 |x8 |x9 |x10
    00013 |0.01 | 0 |0 |0 |0 |0 |0 |0.06 |0.09 | 0.001

    1. ここに示すように、デフォルト設定のクラスタを起動します。gcloud コマンドライン インターフェースを使用してクラスタを作成し、ジョブを実行します。
    2. 提供されたスターター コードを使用して、BQ テーブルを読み取り、RDD をデータフレームに変換して、KMeans モデル/パイプラインに渡します。

コンソールに出力するスキーマと head() は次のとおりです。


  1. 次の方法でクラスタリング KMeans アルゴリズムを実行します。
    • モデルを複数回実行する
    • 異なるパラメーターを使用 (つまり、#clusters と init_mode を変更)
    • エラーまたはコスト指標を計算する
    • 最適なモデルとパラメーターの組み合わせを選択する
    • KMeans を推定量としてパイプラインを作成する
    • paramMap を使用して複数のパラメーターを渡す

警告付きで次の出力が得られます

7:03:24 WARN org.apache.spark.mllib.clustering.KMeans: The input data was not directly cached, which may hurt performance if its parent RDDs are also uncached. [PipelineModel_443dbf939b7bd3bf7bfc, PipelineModel_4b64bb761f4efe51da50, PipelineModel_4f858411ac19beacc1a4, PipelineModel_4f58b894f1d14d79b936, PipelineModel_4b8194f7a5e6be6eaf33, PipelineModel_4fc5b6370bff1b4d7dba, PipelineModel_43e0a196f16cfd3dae57, PipelineModel_47318a54000b6826b20e, PipelineModel_411bbe1c32db6bf0a92b, PipelineModel_421ea1364d8c4c9968c8, PipelineModel_4acf9cdbfda184b00328, PipelineModel_42d1a0c61c5e45cdb3cd, PipelineModel_4f0db3c394bcc2bb9352, PipelineModel_441697f2748328de251c, PipelineModel_4a64ae517d270a1e0d5a, PipelineModel_4372bc8db92b184c05b0]


出力: [array([7.64676638e-07, 3.58531391e-01, 1.68879698e-03, 0.00000000e+00, 1.53477043e-02, 1.25822915e-02, 0.00000000e+00, 6.93060772e-07, 1.41766847e-03, 1.60941306e-02], array([2.36494105e-06, 1.87719732e-02, 3.73829379e-03, 0.00000000e+00, 4.20724542e-02, 2.28675684e-02, 0.00000000e+00, 5.45002249e-06, 1.17331153e-02, 1.24364600e-02])


ここに質問のリストがあり、ヘルプが必要です。

  • すべてのモデルの配列として 2 つのクラスター センターのみを含むリストを取得します。
    • パイプラインにアクセスしようとすると、KMeans モデルがデフォルトで k=2 になっているようです。なぜこれが起こるのでしょうか?
    • 最後のループは、pipelineModel と 0 番目のステージにアクセスし、clusterCenter() メソッドを実行することになっていますか? これは正しい方法ですか?
    • データがキャッシュされていないというエラーが表示されるのはなぜですか?
  • パイプラインを使用する場合、WSSSE または .computeCost()(mllib 用) のような同等のメソッドを計算する方法が見つかりませんでした。異なるパラメーターに基づいて異なるモデルを比較するにはどうすればよいですか?
  • ソースコードhereで定義されているように、次のコードを実行して .computeCost メソッドを実行しようとしました。
    • これは、パイプラインを使用して KMeans モデルとモデル選択を並行して実行する目的に反しますが、次のコードを試しました。

これにより、ループの最後に次のように出力されます。

[ 634035.00294687 634035.00294687 634035.00294687 634035.00294687 634035.00294687 634035.00294687 634035.00294687 634035.00294687 634035.00294687 634035.00294687 634035.00294687 634035.00294687 634035.00294687 634035.00294687 634035.00294687 634035.00294687]

  • 計算されたコスト/エラーは各モデルで同じですか? この場合も、正しいパラメーターを使用して pipelineModel にアクセスできません。

どんな助け/指導も大歓迎です! ありがとう!

0 投票する
1 に答える
4678 参照

scala - Spark のベクター列にメタデータをアタッチする

コンテキスト: ラベルと機能の 2 つの列を持つデータ フレームがあります。

featuresは、 VectorAssemblerを使用して構築された数値型の mllib.linalg.VectorUDT です。

質問: 特徴ベクトルにスキーマを割り当てる方法はありますか? 各機能の名前を追跡したいと思います。

これまでに試した:


しかし、これを既存のデータ フレームに適用する方法がわかりませんでした。

0 投票する
1 に答える
2505 参照

scala - Spark の機能ベクトルに IndexToString を適用する

コンテキスト: StringIndexer を使用してすべてのカテゴリ値にインデックスが付けられたデータ フレームがあります。

次に、VectorAssembler を使用して、すべての特徴列 (インデックス付きのカテゴリ列を含む) をベクトル化しました。

分類器といくつかの追加手順を適用すると、ラベル、特徴、および予測を含むデータ フレームが完成します。インデックス付きの値を元の文字列形式に変換するために、特徴ベクトルを個別の列に拡張したいと考えています。

質問:これを行う簡単な方法はありますか、または何らかの方法で予測列をテスト データ フレームにアタッチする最善の方法はありますか?

私が試したこと:

これを適用すると、必要な列が得られますが、それらは Vector 形式 (意図されているとおり) であり、Double 型ではありません。

編集: 目的の出力は、元のデータフレーム(つまり、インデックスではなく文字列としてのカテゴリ機能)であり、予測されたラベル(私の場合は0または1)を示す追加の列があります。

たとえば、分類子の出力が次のようになったとします。

各機能に VectorSlicer を適用すると、次のようになります。

これは素晴らしいことですが、次のものが必要です。

次に、IndexToString を使用して次のように変換できるようにします。

あるいは:

0 投票する
1 に答える
322 参照

apache-spark - Spark でファイルなしで JavaRDD を作成する

私はスパークにまったく慣れていないので、ファイルから入力を読み取らずに、ラベル付きのポイントからプログラムで JavaRDD を作成したいと考えています。次のようにいくつかのラベル付きポイントを作成するとします。

次に、これらのベクトルを使用して JavaRDD を作成したいと考えています。どうやってやるの。