Spark MLlib – ApacheSparkの機械学習ライブラリ



このSparkMLlibブログでは、ApacheSparkの機械学習ライブラリを紹介します。これには、SparkMLlibを使用したMovieRecommendationSystemプロジェクトが含まれています。

Spark MLlib ApacheSparkの機械学習コンポーネントです。Sparkの主な魅力の1つは、計算を大規模にスケーリングできることです。これは、まさに機械学習アルゴリズムに必要なものです。ただし、制限は、すべての機械学習アルゴリズムを効果的に並列化できるわけではないということです。タスクの並列処理であろうとデータの並列処理であろうと、各アルゴリズムには並列化に関する独自の課題があります。

そうは言っても、Sparkは機械学習アルゴリズムとアプリケーションを構築するための事実上のプラットフォームになりつつあります。さて、あなたはチェックアウトすることができます ブログを進める前に、業界の専門家によってキュレーションされています。Spark MLlibに取り組んでいる開発者は、Sparkフレームワークにスケーラブルで簡潔な方法でますます多くのマシンアルゴリズムを実装しています。このブログを通じて、機械学習、Spark MLlib、そのユーティリティ、アルゴリズム、およびMovie RecommendationSystemの完全な使用例の概念を学習します。





このブログでは、次のトピックについて説明します。

  1. 機械学習とは何ですか?
  2. SparkMLlibの概要
  3. SparkMLlibツール
  4. MLlibアルゴリズム
  5. ユースケース–映画レコメンデーションシステム

機械学習とは何ですか?

機械学習は、人工知能におけるパターン認識と計算論的学習理論の研究から発展し、データから学習して予測を行うことができるアルゴリズムの研究と構築を探求します。このようなアルゴリズムは、データ駆動型の予測または決定を行うことにより、厳密に静的なプログラム命令に従うことを克服します。 、サンプル入力からモデルを構築することにより。



機械学習-SparkMLlib-Edureka 図: 機械学習ツール

機械学習は計算統計と密接に関連しており、コンピューターを使用した予測作成にも焦点を当てています。それは、方法、理論、およびアプリケーションドメインをフィールドに提供する数理最適化と強い結びつきがあります。データ分析の分野では、機械学習は、商業的に使用される予測分析として知られる予測に役立つ複雑なモデルとアルゴリズムを考案するために使用される方法です。

機械学習タスクには3つのカテゴリがあります。



  1. 教師あり学習 :教師あり学習とは、入力変数(x)と出力変数(Y)があり、アルゴリズムを使用して入力から出力へのマッピング関数を学習することです。
  2. 教師なし学習 :教師なし学習は、ラベル付けされた応答のない入力データで構成されるデータセットから推論を引き出すために使用される機械学習アルゴリズムの一種です。
  3. 強化学習 :コンピュータプログラムは、特定の目標(車両の運転や対戦相手とのゲームのプレイなど)を実行する必要がある動的な環境と相互作用します。プログラムは、問題の領域をナビゲートするときに、報酬と罰の観点からフィードバックを提供されます。この概念は強化学習と呼ばれます。

SparkMLlibの概要

Spark MLlibは、ApacheSparkで機械学習を実行するために使用されます。 MLlibは、一般的なアルゴリズムとユーティリティで構成されています。

MLlibの概要:

  • spark.mllib RDDの上に構築された元のAPIが含まれています。現在、メンテナンスモードです。
  • spark.ml DataFramesの上に構築された高レベルのAPIを提供しますMLパイプラインの構築。 spark.ml 現時点でのSparkの主要な機械学習APIです。

SparkMLlibツール

Spark MLlibは、次のツールを提供します。

  • MLアルゴリズム: MLアルゴリズムは、MLlibの中核を形成します。これらには、分類、回帰、クラスタリング、協調フィルタリングなどの一般的な学習アルゴリズムが含まれます。
  • 特徴化: 特徴化には、特徴抽出、変換、次元削減、および選択が含まれます。
  • パイプライン: パイプラインは、MLパイプラインを構築、評価、調整するためのツールを提供します。
  • 永続性: 永続性は、アルゴリズム、モデル、パイプラインの保存と読み込みに役立ちます。
  • ユーティリティ: ユーティリティ線形代数、統計、データ処理用。

MLlibアルゴリズム

SparkMLlibで人気のあるアルゴリズムとユーティリティは次のとおりです。

  1. 基本統計
  2. 回帰
  3. 分類
  4. レコメンデーションシステム
  5. クラスタリング
  6. 次元削減
  7. 特徴抽出
  8. 最適化

これらのいくつかを詳しく見てみましょう。

基本統計

基本統計 最も基本的な機械学習手法が含まれています。これらには以下が含まれます:

  1. 要約統計量 :例には、平均、分散、カウント、最大、最小、およびnumNonZerosが含まれます。
  2. 相関関係 :スピアマンとピアソンは、相関関係を見つけるいくつかの方法です。
  3. 層化抽出法 :これらには、sampleBykeyおよびsampleByKeyExactが含まれます。
  4. 仮説検定 :ピアソンのカイ2乗検定は、仮説検定の例です。
  5. ランダムデータ生成 :RandomRDD、NormalおよびPoissonは、ランダムデータを生成するために使用されます。

回帰

回帰 分析は、変数間の関係を推定するための統計的プロセスです。これには、従属変数と1つ以上の独立変数の間の関係に焦点が当てられている場合に、いくつかの変数をモデル化および分析するための多くの手法が含まれています。より具体的には、回帰分析は、他の独立変数が固定されている間に、独立変数のいずれかが変化したときに従属変数の典型的な値がどのように変化するかを理解するのに役立ちます。

回帰分析は、予測と予測に広く使用されており、その使用は機械学習の分野と実質的に重複しています。回帰分析は、独立変数のどれが従属変数に関連しているかを理解し、これらの関係の形式を調査するためにも使用されます。制限された状況では、回帰分析を使用して、独立変数と従属変数の間の因果関係を推測できます。

分類

分類 は、カテゴリのメンバーシップがわかっている観測値(またはインスタンス)を含むデータのトレーニングセットに基づいて、新しい観測値がカテゴリのセット(サブ母集団)のどれに属するかを識別する問題です。これはパターン認識の例です。

ここでの例は、特定の電子メールを「スパム」または「非スパム」クラスに割り当てること、または患者の観察された特性(性別、血圧、特定の症状の有無)によって説明されるように特定の患者に診断を割り当てることです。等。)。

レコメンデーションシステム

レコメンデーションシステム は、ユーザーがアイテムに与える「評価」または「好み」を予測しようとする情報フィルタリングシステムのサブクラスです。レコメンダーシステムは、近年ますます人気が高まっており、映画、音楽、ニュース、本、研究記事、検索クエリ、ソーシャルタグ、製品全般など、さまざまな分野で利用されています。

レコメンダーシステムは通常、2つの方法のいずれかでレコメンデーションのリストを作成します–協調的でコンテンツベースのフィルタリング、またはパーソナリティベースのアプローチです。

  1. 協調フィルタリング ユーザーの過去の行動(以前に購入または選択されたアイテム、および/またはそれらのアイテムに与えられた数値評価)、および他のユーザーによる同様の決定からモデルを構築するアプローチ。次に、このモデルを使用して、ユーザーが関心を持つ可能性のあるアイテム(またはアイテムの評価)を予測します。
  2. コンテンツベースのフィルタリング アプローチでは、同様のプロパティを持つ追加のアイテムを推奨するために、アイテムの一連の個別の特性を利用します。

さらに、これらのアプローチは、ハイブリッドレコメンダーシステムとして組み合わされることがよくあります。

クラスタリング

クラスタリング は、同じグループ(クラスターと呼ばれる)内のオブジェクトが他のグループ(クラスター)内のオブジェクトよりも(ある意味で)互いに類似するようにオブジェクトのセットをグループ化するタスクです。したがって、これは探索的データマイニングの主なタスクであり、機械学習、パターン認識、画像分析、情報検索、バイオインフォマティクス、データ圧縮、コンピューターグラフィックスなど、多くの分野で使用される統計データ分析の一般的な手法です。

次元削減

次元削減 は、主要な変数のセットを取得することにより、検討中の確率変数の数を減らすプロセスです。それは特徴選択と特徴抽出に分けることができます。

  1. 機能の選択: 特徴選択は、元の変数(特徴または属性とも呼ばれます)のサブセットを検索します。
  2. 特徴抽出: これにより、高次元空間のデータがより少ない次元の空間に変換されます。主成分分析(PCA)のように、データ変換は線形である可能性がありますが、多くの非線形次元削減手法も存在します。

特徴抽出

特徴抽出 測定データの初期セットから開始し、有益で非冗長であることを目的とした派生値(機能)を構築し、その後の学習と一般化のステップを容易にし、場合によってはより良い人間の解釈につながります。これは次元削減に関連しています。

最適化

最適化 最高の選択です利用可能な選択肢のいくつかのセットからの要素(いくつかの基準に関して)。

最も単純なケースでは、最適化問題は、許可されたセット内から入力値を体系的に選択し、関数の値を計算することによって、実際の関数を最大化または最小化することで構成されます。最適化の理論と手法を他の定式化に一般化することは、応用数学の広い領域を含みます。より一般的には、最適化には、定義されたドメイン(または入力)が与えられた場合に、いくつかの目的関数の「利用可能な最良の」値を見つけることが含まれます。さまざまな種類の目的関数とさまざまな種類のドメインが含まれます。

ユースケース–映画レコメンデーションシステム

問題文: Apache Sparkを使用して、ユーザーの好みに基づいて映画を推薦する映画推薦システムを構築する。

私たちの要件:

それでは、映画のレコメンデーションシステムを構築するための要件を評価しましょう。

  1. 大量のデータを処理する
  2. 複数のソースからの入力
  3. 使いやすい
  4. 高速処理

私たちが評価できるように私たちの要件では、大きなデータを短時間で処理するための最高のビッグデータツールが必要です。 したがって、Apache Spark は、映画レコメンデーションシステムを実装するのに最適なツールです。

次に、システムのフロー図を見てみましょう。

ご覧のとおり、以下ではSparkStreamingからのストリーミングを使用しています。リアルタイムでストリーミングしたり、HadoopHDFSからデータを読み取ったりできます。

データセットの取得:

映画のレコメンデーションシステムでは、IMDB、Rotten Tomatoes、Times MovieRatingsなどの多くの人気のあるWebサイトからユーザー評価を取得できます。このデータセットは、CSVファイル、テキストファイルなどの多くの形式で利用できます。ndデータベース。ウェブサイトからライブでデータをストリーミングするか、ダウンロードして保存することができますローカルファイルシステムまたはHDFS。

データセット:

次の図は、人気のあるWebサイトからデータセットを収集する方法を示しています。

データをSparkにストリーミングすると、次のようになります。

機械学習:

レコメンデーションシステム全体は、機械学習アルゴリズムに基づいています 交互の最小二乗 。ここで、ALSは回帰分析の一種であり、各データポイントからの距離の二乗和が最小になるように、回帰を使用してデータポイントの間に線を引きます。したがって、この線は、独立変数の値と一致する関数の値を予測するために使用されます。

図の青い線は、最適な回帰線です。この線の場合、寸法Dの値は最小です。他のすべての赤い線は、常にデータセット全体から遠くなります。

Spark MLlibの実装:

  1. Collaborative Filtering(CF)を使用して、他の映画の評価に基づいて特定の映画のユーザーの評価を予測します。
  2. 次に、これをその特定の映画に対する他のユーザーの評価と照合します。
  3. 機械学習から次の結果を得るには、Spark SQLのDataFrame、Dataset、およびSQLServiceを使用する必要があります。

これが私たちのプログラムの擬似コードです:

import org.apache.spark.mllib.recommendation.ALS import org.apache.spark.mllib.recommendation.Rating import org.apache.spark.SparkConf //その他の必要なパッケージをインポートするobjectMovie {def main(args:Array [String] ){val conf = new SparkConf()。setAppName( 'Movie')。setMaster( 'local [2]')val sc = new SparkContext(conf)val rawData = sc.textFile( '*ムービーCSVファイルからデータを読み取る* ')// rawData.first()val rawRatings = rawData.map(*タブ区切り文字でrawDataを分割*)val Ratings = rawRatings.map {*ユーザー、ムービー、評価のケース配列をマップ*} //データvalモデルのトレーニング= ALS.train(ratings、50、5、0.01)model.userFeatures model.userFeatures.count model.productFeatures.count valpredictedRating = *映画123のユーザー789の予測* val userId = *ユーザー789 * val K = 10 val topKRecs = model.recommendProducts(* Kの特定の値についてユーザーに推奨*)println(topKRecs.mkString( ''))val movies = sc.textFile( '*ムービーリストデータの読み取り*')val titles = movies.map (line => line.split( '|')。take( 2))。map(array =>(array(0).toInt、array(1)))。collectAsMap()val titlesRDD = movies.map(line => line.split( '|')。take(2) ).map(array =>(array(0).toInt、array(1)))。cache()titles(123)val moviesForUser = ratings。*ユーザーの検索789 * val sqlContext = * SQLコンテキストの作成* valmovies推奨= sqlContext。*推奨される映画のデータフレームを作成します* moviesRecommended.registerTempTable( 'moviesRecommendedTable')sqlContext.sql( 'select count(*)from moviesRecommendedTable')。foreach(println)moviesForUser。 *ユーザー789の評価を並べ替えます* .map(*評価を映画のタイトルにマップします*)。 *評価を出力* val results = moviesForUser.sortBy(-_。rating).take(30).map(rating =>(titles(rating.product)、rating.rating))}}

予測を生成したら、SparkSQLを使用して結果をRDBMSシステムに保存できます。さらに、これはWebアプリケーションに表示できます。

結果:

図: ユーザー77に推奨される映画

やあ!これにより、ApacheSparkを使用した映画レコメンデーションシステムの作成に成功しました。これで、SparkMLlibが提供しなければならない多くの一般的なアルゴリズムの1つだけをカバーしました。機械学習の詳細については、データサイエンスアルゴリズムに関する今後のブログで学習します。

Pythonで10進数を2進数に変換する方法

今後も、Sparkチュートリアル、SparkストリーミングチュートリアルでApacheSparkの学習を続けることができます、およびSparkインタビューの質問。Edurekaは、オンラインで可能な限り最高の学習体験を提供することに専念しています。

私たちをチェックしてください Sparkを学び、Sparkのドメインでキャリアを築き、RDD、Spark Streaming、SparkSQL、MLlib、GraphX、Scalaを実際のユースケースで使用して大規模なデータ処理を実行するための専門知識を構築したい場合。