質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • 機械学習

    715questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

  • Scala

    183questions

    ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

  • 自然言語処理

    123questions

    自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

  • 統計

    53questions

    統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

  • Spark

    38questions

    Spark(Apache Spark)とは、膨大なデータを迅速、柔軟に分散並行処理を行うフレームワークです。分析ツールであるApache Hadoopと比較し、最大で100倍の速度でデータ処理ができるとされています。

Apache Spark MLlib (Scala) による主成分分析

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 986

Apache Spark MLlib (Scala)に関して質問させて下さい。

質問

Spark MLlibで主成分分析をしたいのですが、RDD[(String, String, Double)]RowMatrixに変換するにはどうすれば良いでしょうか?

下記の、データ変換のイメージをご参照いただき、そもそもやりたいことに対して、アプローチが正しいかどうかについてもアドバイスを頂けると幸いです。
アプローチとは、RDD[(String, String, Double)]の次元削減をするために、RowMatrixに変換してcomputePrincipalComponentsすることを指しています。

質問の背景としては、言語処理100本ノック 85. 主成分分析による次元圧縮 にてハマり中です。。。

データ変換のイメージ

 変換前データ
(composition,studies,1.791759469228055)
(coaching,tenure,3.6375861597263857)
(college,ranked,1.0986122886681098)
(created,Media,1.0986122886681098)
(ca,ca,6.173786103901937)
(Chief,served,2.3978952727983707)
(calculate,To,3.9889840465642745)
(childbirth,after,2.70805020110221)
(congested,most,3.1354942159291497)
(competition,amateur,2.833213344056216)
(contiguous,United_States,3.6375861597263857)
(contains,photographs,2.1972245773362196)
(Christians,Protestant,4.330733340286331)
(以下略)
 変換後データ

主成分分析で次元削減するには、変換前データを下記のような疎行列に変換する必要があるという認識です。

  studies tenure ranked      (以下略)
composition 1.791759469228055  0   0 
coaching  0  3.6375861597263857  0 
college  0   0   1.0986122886681098
(以下略)

 バージョン情報

scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.1"
libraryDependencies += "org.apache.spark" % "spark-mllib_2.11" % "1.6.1"
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

+1

次元のラベルは捨ててしまって良いことに気づき、自己解決しました。

def reduceDimension(rdd: RDD[((String, String), Double)]): Map[String, Array[Double]] = {
    // 疎行列化
    val contextMap = rdd.collect.toMap
    val words = rdd.keys.map(_._1).distinct
    val contexts = rdd.keys.map(_._2).distinct.collect
    val contextMatrix: RDD[Vector] = words.map(w => Vectors.dense(contexts.map(c => contextMap.getOrElse((w, c), 0.0)).slice(0, word_count)))

    // RowMatrix型に変換
    val rowMatrix = new RowMatrix(contextMatrix)

    // PCA実行
    val pcMatrix = rowMatrix.computePrincipalComponents(300)

    // 以下略

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    【Spark】フレームワークSparkの使い方について

    下記サイトを参考にしてみましたが、プロジェクトを実行という段階で詰まってしまいます。 開発環境はeclipseです。 http://qiita.com/kinmojr/item

  • 解決済

    html表の書き方について

    前提・実現したいこと htmlで表を表示する場合の書き方について教えてください。 発生している問題・エラーメッセージ htmlで表を記載する際に同一カラム内で 以下のよ

  • 解決済

    HerokuにJAVAのSPARKを使用した時のFreeMarkerのテンプレートパスの設定方法

    前提・実現したいこと HerokuでJAVAのWEBアプリを構築中です。 WEBフレームワークはSPARKを使用していおり、 画面のテンプレートとして、FreeMarkerを

  • 解決済

    Google Apps Script  query関数で読み込んだデータのGASでの取得

    前提・実現したいこと query関数で読み込んだデータを GASを使用して条件による色分けを行おうとしています。 発生している問題・エラーメッセージ query関数でデ

  • 解決済

    sql文 カラムを一緒にしたい。

    このようなテーブルがあった場合 FOLLOW_IDをUSER_IDとして認識させることはできますか?? つまりFOLLOW_IDの値をUSER_IDのカラムに足した

  • 解決済

    PySparkで列の取得と加工と追加

    PySparkで以下のような処理をできたらと思っています. 【処理内容】 タイムスタンプの列から文字列をとってきて,新しい列(dayとtime)に追加したいと考えています. pyt

  • 解決済

    insert into でインサートできない

    df内のweekの後ろの1文字を除去して、dfのmonthにinsertしたいのですが、 エラーは出ないのにデータを確認するとインサートされていません。 --行追加 alter

  • 解決済

    重複したデータを抽出させないSQL

    同一テーブル、または別テーブルに重複したデータが存在していれば、 それを抽出するCSVリストを作成したいと考えております。 ID SEI MEI 010 山田 太郎 02

同じタグがついた質問を見る

  • 機械学習

    715questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

  • Scala

    183questions

    ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

  • 自然言語処理

    123questions

    自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

  • 統計

    53questions

    統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

  • Spark

    38questions

    Spark(Apache Spark)とは、膨大なデータを迅速、柔軟に分散並行処理を行うフレームワークです。分析ツールであるApache Hadoopと比較し、最大で100倍の速度でデータ処理ができるとされています。