Mahout-quick-guide
Mahout-はじめに
私たちは、情報が豊富にある日と年齢に住んでいます。 情報の過負荷は、小さなメールボックスの管理が困難になるほどの高さにまで拡大しました! 人気のあるWebサイト(Facebook、Twitter、Youtubeなど)の一部が毎日収集および管理しなければならないデータと記録の量を想像してください。 あまり知られていないWebサイトでも、大量の情報を大量に受け取ることは珍しくありません。
通常、データマイニングアルゴリズムを使用して、バルクデータを分析し、傾向を特定して結論を導き出します。 ただし、クラウド上に分散された複数のマシンで計算タスクが実行されない限り、非常に大きなデータセットを処理して結果を迅速に提供するのに十分なデータマイニングアルゴリズムはありません。
計算タスクを複数のセグメントに分割し、各セグメントを異なるマシンで実行できる新しいフレームワークができました。 Mahout は、通常バックグラウンドでHadoopインフラストラクチャと連動して実行され、大量のデータを管理するデータマイニングフレームワークです。
Apache Mahoutとは何ですか?
_mahout_は、象を主人として運転する人です。 この名前は、象をロゴとして使用するApache Hadoopとの密接な関係に由来しています。
*Hadoop* は、単純なプログラミングモデルを使用してコンピューターのクラスター全体の分散環境でビッグデータを保存および処理できるようにする、Apacheのオープンソースフレームワークです。
Apache Mahout は、スケーラブルな機械学習アルゴリズムの作成に主に使用されるオープンソースプロジェクトです。 以下のような一般的な機械学習技術を実装しています。
- 勧告
- 分類
- クラスタリング
Apache Mahoutは、2008年にApacheのLuceneのサブプロジェクトとして始まりました。 2010年、MahoutはApacheのトップレベルプロジェクトになりました。
Mahoutの機能
Apache Mahoutの基本的な機能を以下にリストします。
- MahoutのアルゴリズムはHadoopの上に記述されているため、分散環境でうまく機能します。 MahoutはApache Hadoopライブラリを使用して、クラウド内で効果的に拡張します。
- Mahoutは、大量のデータに対してデータマイニングタスクを実行するための、すぐに使用できるフレームワークをコーダーに提供します。
- Mahoutを使用すると、アプリケーションで大量のデータセットを効果的かつ迅速に分析できます。
- k-means、fuzzy k-means、Canopy、Dirichlet、Mean-ShiftなどのMapReduce対応クラスタリング実装がいくつか含まれています。
- 分散Naive BayesおよびComplementary Naive Bayes分類の実装をサポートします。
- 進化的プログラミングのための分散フィットネス機能機能が付属しています。
- マトリックスおよびベクトルライブラリが含まれています。
Mahoutのアプリケーション
- Adobe、Facebook、LinkedIn、Foursquare、Twitter、Yahooなどの企業は、Mahoutを社内で使用しています。
- Foursquareは、特定の地域で利用できる場所、食べ物、エンターテイメントを見つけるのに役立ちます。 Mahoutのレコメンダーエンジンを使用します。
- Twitterは、ユーザーの興味のモデリングにMahoutを使用しています。
- Yahoo! パターンマイニングにMahoutを使用します。
Mahout-機械学習
Apache Mahoutは、開発者が最適化されたアルゴリズムを使用できるようにする非常にスケーラブルな機械学習ライブラリです。 Mahoutは、推奨、分類、クラスタリングなどの一般的な機械学習技術を実装しています。 したがって、先に進む前に、機械学習に関する簡単なセクションを用意することをお勧めします。
機械学習とは何ですか?
機械学習は、システムが自動的に学習し、経験とともに向上するようにシステムをプログラミングすることを扱う科学の一分野です。 ここで、学習とは、入力データを認識して理解し、提供されたデータに基づいて賢明な決定を下すことを意味します。
すべての可能な入力に基づいてすべての決定に応えることは非常に困難です。 この問題に取り組むために、アルゴリズムが開発されています。 これらのアルゴリズムは、統計、確率論、論理、組み合わせ最適化、検索、強化学習、および制御理論の原理を使用して、特定のデータと過去の経験から知識を構築します。
開発されたアルゴリズムは、次のようなさまざまなアプリケーションの基盤を形成します。
- ビジョン処理
- 言語処理
- 予測(株式市場の動向など)
- パターン認識
- ゲーム
- データマイニング
- エキスパートシステム
- ロボティクス
機械学習は広大な領域であり、すべての機能をカバーすることはこのチュートリアルの範囲をはるかに超えています。 機械学習技術を実装する方法はいくつかありますが、最も一般的に使用されるのは*教師あり*および*教師なし学習*です。
教師あり学習
教師あり学習では、利用可能なトレーニングデータから関数を学習します。 教師あり学習アルゴリズムがトレーニングデータを分析し、推論された関数を生成します。これは、新しい例をマッピングするために使用できます。 教師あり学習の一般的な例は次のとおりです。
- 電子メールをスパムとして分類し、
- コンテンツに基づいてWebページにラベルを付ける
- 音声認識。
ニューラルネットワーク、サポートベクターマシン(SVM)、Naive Bayes分類器など、多くの教師あり学習アルゴリズムがあります。 MahoutはNaive Bayes分類器を実装しています。
教師なし学習
教師なし学習は、トレーニング用に事前定義されたデータセットがなくても、ラベルのないデータの意味があります。 教師なし学習は、利用可能なデータを分析し、パターンと傾向を探すための非常に強力なツールです。 同様の入力を論理グループにクラスタリングするために最も一般的に使用されます。 教師なし学習への一般的なアプローチは次のとおりです。
- k-means
- 自己組織化マップ、および
- 階層的クラスタリング
勧告
推奨は、以前の購入、クリック、評価などのユーザー情報に基づいて綿密な推奨を提供する一般的な手法です。
- Amazonはこの手法を使用して、興味のある可能性のある推奨アイテムのリストを表示し、過去のアクションから情報を引き出します。 Amazonの背後で動作して、ユーザーの行動をキャプチャし、以前のアクションに基づいて選択したアイテムを推奨する推奨エンジンがあります。
- Facebookは、推奨テクニックを使用して、「知っている可能性のある人」リストを特定して推奨します。
分類
*categorization* とも呼ばれる分類は、既知のデータを使用して、新しいデータを既存のカテゴリのセットに分類する方法を決定する機械学習手法です。 分類は教師あり学習の一種です。
- Yahoo!などのメールサービスプロバイダー Gmailはこの手法を使用して、新しいメールをスパムとして分類するかどうかを決定します。 分類アルゴリズムは、特定のメールをスパムとしてマークするユーザーの習慣を分析することにより、トレーニングを行います。 それに基づいて、分類子は、今後のメールを受信トレイまたはスパムフォルダーのどちらに保管するかを決定します。
- iTunesアプリケーションは、分類を使用してプレイリストを準備します。
クラスタリング
クラスタリングは、共通の特性に基づいて同様のデータのグループまたはクラスターを形成するために使用されます。 クラスタリングは、教師なし学習の一形態です。
- GoogleやYahoo!などの検索エンジン クラスタリング手法を使用して、同様の特性を持つデータをグループ化します。
- ニュースグループは、クラスタリング手法を使用して、関連トピックに基づいてさまざまな記事をグループ化します。
クラスタリングエンジンは、入力データを完全に処理し、データの特性に基づいて、グループ化するクラスターを決定します。 次の例を見てください。
チュートリアルのライブラリには、さまざまなテーマに関するトピックが含まれています。 finddevguidesで新しいチュートリアルを受け取ると、その内容に基づいてグループ化する場所を決定するクラスタリングエンジンによって処理されます。
Mahout-環境
この章では、mahoutのセットアップ方法を説明します。 JavaとHadoopは、mahoutの前提条件です。 以下に、Java、Hadoop、およびMahoutをダウンロードしてインストールする手順を示します。
インストール前のセットアップ
Linux環境にHadoopをインストールする前に、 ssh (Secure Shell)を使用してLinuxをセットアップする必要があります。 Linux環境をセットアップするには、以下の手順に従ってください。
ユーザーを作成する
Hadoopの別のユーザーを作成して、HadoopファイルシステムをUnixファイルシステムから分離することをお勧めします。 以下の手順に従って、ユーザーを作成します。
- コマンド「su」を使用してルートを開きます。
- *“ useradd username” *コマンドを使用して、rootアカウントからユーザーを作成します。
- これで、*“ su username” *コマンドを使用して既存のユーザーアカウントを開くことができます。
- Linuxターミナルを開き、次のコマンドを入力してユーザーを作成します。
$ su
password:
# useradd hadoop
# passwd hadoop
New passwd:
Retype new passwd
SSHセットアップとキー生成
SSHのセットアップは、デーモンシェル操作の開始、停止、分散など、クラスターでさまざまな操作を実行するために必要です。 Hadoopのさまざまなユーザーを認証するには、Hadoopユーザーに公開/秘密キーペアを提供し、それをさまざまなユーザーと共有する必要があります。
次のコマンドを使用して、SSHを使用してキーと値のペアを生成し、id_rsa.pubから公開キーをauthorized_keysにコピーし、authorized_keysファイルにそれぞれ所有者、読み取り、書き込み権限を付与します。
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
sshの検証
ssh localhost
Javaのインストール
Javaは、HadoopとHBaseの主要な前提条件です。 まず、「java -version」を使用してシステム内のJavaの存在を確認する必要があります。 Javaバージョンコマンドの構文は次のとおりです。
$ java -version
次の出力が生成されます。
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
システムにJavaがインストールされていない場合は、Javaをインストールするための以下の手順に従ってください。
ステップ1
次のリンクにアクセスして、Java(JDK <最新バージョン>-X64.tar.gz)をダウンロードします。http://download.oracle.com/otn-pub/java/jdk/7u75-b13/jdk-7u75-windows-x64 .exe [Oracle]
次に、* jdk-7u71-linux-x64.tar.gzがシステムにダウンロードされます*。
ステップ2
通常、ダウンロードしたJavaファイルは、ダウンロードフォルダーにあります。 それを確認し、次のコマンドを使用して jdk-7u71-linux-x64.gz ファイルを抽出します。
$ cd Downloads/
$ ls
jdk-7u71-linux-x64.gz
$ tar zxf jdk-7u71-linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-linux-x64.gz
- ステップ3 *
すべてのユーザーがJavaを使用できるようにするには、Javaを「/usr/local/」の場所に移動する必要があります。 ルートを開き、次のコマンドを入力します。
$ su
password:
# mv jdk1.7.0_71/usr/local/
# exit
- ステップ4 *
*PATH* および *JAVA_HOME* 変数を設定するには、次のコマンドを*〜/.bashrc file *に追加します。
export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH= $PATH:$JAVA_HOME/bin
次に、上記で説明したように、ターミナルから java -version コマンドを確認します。
Hadoopをダウンロードする
Javaをインストールしたら、最初にHadoopをインストールする必要があります。 以下に示すように、「Hadoopバージョン」コマンドを使用して、Hadoopの存在を確認します。
hadoop version
次の出力が生成されます。
Hadoop 2.6.0
Compiled by jenkins on 2014-11-13T21:10Z
Compiled with protoc 2.5.0
From source with checksum 18e43357c8f927c0695f1e9522859d6a
This command was run using/home/hadoop/hadoop/share/hadoop/common/hadoopcommon-2.6.0.jar
システムがHadoopを見つけられない場合は、Hadoopをダウンロードしてシステムにインストールします。 以下のコマンドに従ってください。
次のコマンドを使用して、Apache Software Foundationからhadoop-2.6.0をダウンロードして抽出します。
$ su
password:
# cd/usr/local
# wget http://mirrors.advancedhosters.com/apache/hadoop/common/hadoop-
2.6.0/hadoop-2.6.0-src.tar.gz
# tar xzf hadoop-2.6.0-src.tar.gz
# mv hadoop-2.6.0/* hadoop/
# exit
Hadoopのインストール
必要なモードのいずれかでHadoopをインストールします。 ここでは、疑似分散モードでHBaseの機能を実証しているため、Hadoopを疑似分散モードでインストールします。
以下の手順に従って、 Hadoop 2.4.1 をシステムにインストールします。
ステップ1:Hadoopのセットアップ
次のコマンドを*〜/.bashrc *ファイルに追加することにより、Hadoop環境変数を設定できます。
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME
次に、現在実行中のシステムにすべての変更を適用します。
$ source ~/.bashrc
ステップ2:Hadoopの構成
すべてのHadoop構成ファイルは、「$ HADOOP_HOME/etc/hadoop」の場所にあります。 Hadoopインフラストラクチャに応じて、これらの構成ファイルを変更する必要があります。
$ cd $HADOOP_HOME/etc/hadoop
JavaでHadoopプログラムを開発するには、 JAVA_HOME 値をシステム内のJavaの場所に置き換えて、 hadoop-env.sh ファイルのJava環境変数をリセットする必要があります。
export JAVA_HOME=/usr/local/jdk1.7.0_71
以下は、Hadoopを構成するために編集する必要があるファイルのリストです。
*core-site.xml*
*core-site.xml* ファイルには、Hadoopインスタンスに使用されるポート番号、ファイルシステムに割り当てられたメモリ、データを保存するためのメモリ制限、読み取り/書き込みバッファのサイズなどの情報が含まれています。
core-site.xmlを開き、<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
*hdfs-site.xm*
*hdfs-site.xml* ファイルには、ローカルファイルシステムのレプリケーションデータ、ネームノードパス、データノードパスの値などの情報が含まれています。 これは、Hadoopインフラストラクチャを保存する場所を意味します。
次のデータを想定します。
dfs.replication (data replication value) = 1
(In the below given path/hadoop/is the user name.
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.)
namenode path =//home/hadoop/hadoopinfra/hdfs/namenode
(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.)
datanode path =//home/hadoop/hadoopinfra/hdfs/datanode
このファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/datanode</value>
</property>
</configuration>
- 注意:*上記のファイルでは、すべてのプロパティ値はユーザー定義です。 Hadoopインフラストラクチャに応じて変更できます。
*mapred-site.xml*
このファイルは、Hadoopに糸を設定するために使用されます。 mapred-site.xmlファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
*mapred-site.xml*
このファイルは、使用しているMapReduceフレームワークを指定するために使用されます。 デフォルトでは、Hadoopにはmapred-site.xmlのテンプレートが含まれています。 まず、次のコマンドを使用して、 mapred-site.xml.template から mapred-site.xml ファイルにファイルをコピーする必要があります。
$ cp mapred-site.xml.template mapred-site.xml
*mapred-site.xml* ファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
Hadoopインストールの検証
次の手順を使用して、Hadoopのインストールを確認します。
ステップ1:ノードのセットアップに名前を付ける
次のようにコマンド「hdfs namenode -format」を使用して、namenodeをセットアップします。
$ cd ~
$ hdfs namenode -format
予想される結果は次のとおりです。
10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = localhost/192.168.1.11
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.4.1
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted.
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to retain
1 images with txid >= 0
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11
************************************************************/
ステップ2:Hadoop dfの検証
次のコマンドは、dfsを開始するために使用されます。 このコマンドは、Hadoopファイルシステムを起動します。
$ start-dfs.sh
予想される出力は次のとおりです。
10/24/14 21:37:56
Starting namenodes on [localhost]
localhost: starting namenode, logging to/home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-namenode-localhost.out
localhost: starting datanode, logging to/home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]
ステップ3:糸スクリプトの検証
次のコマンドを使用して、糸スクリプトを開始します。 このコマンドを実行すると、ヤーンデーモンが起動します。
$ start-yarn.sh
予想される出力は次のとおりです。
starting yarn daemons
starting resource manager, logging to/home/hadoop/hadoop-2.4.1/logs/yarn-
hadoop-resourcemanager-localhost.out
localhost: starting node manager, logging to/home/hadoop/hadoop-
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out
ステップ4:ブラウザーでHadoopにアクセスする
hadoopにアクセスするためのデフォルトのポート番号は50070です。 次のURLを使用して、ブラウザーでHadoopサービスを取得します。
http://localhost:50070/
ステップ5:クラスターのすべてのアプリケーションを確認する
クラスターのすべてのアプリケーションにアクセスするためのデフォルトのポート番号は8088です。 このサービスにアクセスするには、次のURLを使用してください。
http://localhost:8088/
Mahoutのダウンロード
Mahoutは、Webサイトhttp://mahout.apache.org/.[Mahout]で入手できます。 WebサイトにあるリンクからMahoutをダウンロードします。 これがウェブサイトのスクリーンショットです。
ステップ1
次のコマンドを使用して、リンクhttp://mirror.nexcess.net/apache/mahout/からApache mahoutをダウンロードします。
[Hadoop@localhost ~]$ wget
http://mirror.nexcess.net/apache/mahout/0.9/mahout-distribution-0.9.tar.gz
次に、 mahout-distribution-0.9.tar.gz がシステムにダウンロードされます。
ステップ2
*mahout-distribution-0.9.tar.gz* が保存されているフォルダーを参照し、以下に示すようにダウンロードしたjarファイルを抽出します。
[Hadoop@localhost ~]$ tar zxvf mahout-distribution-0.9.tar.gz
Mavenリポジトリ
以下に、Eclipseを使用してApache Mahoutを構築するためのpom.xmlを示します。
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-core</artifactId>
<version>0.9</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-math</artifactId>
<version>${mahout.version}</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-integration</artifactId>
<version>${mahout.version}</version>
</dependency>
Mahout-推奨事項
この章では、*推奨と呼ばれる一般的な機械学習手法、そのメカニズム、およびMahout推奨を実装するアプリケーションの作成方法について説明します。
勧告
あなたが興味を持っているかもしれない特定の製品にあなたの注意を引き付けるために、Amazonがどのように推薦されたアイテムのリストを思いつくか疑問に思いました!
Amazonから「Mahout in Action」という本を購入するとします。
以下に示すように、選択した製品とともに、Amazonは関連する推奨アイテムのリストも表示します。
このような推奨リストは、*推奨エンジン*の助けを借りて作成されます。 Mahoutは、次のようないくつかのタイプの推奨エンジンを提供します。
- ユーザーベースのレコメンダー、
- アイテムベースのレコメンダー、および
- 他のいくつかのアルゴリズム。
Mahoutレコメンダーエンジン
Mahoutには、非分散型、非Hadoopベースの推奨エンジンがあります。 アイテムのユーザー設定を含むテキストドキュメントを渡す必要があります。 また、このエンジンの出力は、他のアイテムに対する特定のユーザーの推定設定になります。
例
モバイル、ガジェット、アクセサリーなどの消費財を販売するWebサイトを考えてみてください。 そのようなサイトにMahoutの機能を実装する場合は、推奨エンジンを構築できます。 このエンジンは、ユーザーの過去の購入データを分析し、それに基づいて新製品を推奨します。
推奨エンジンを構築するためにMahoutが提供するコンポーネントは次のとおりです。
- データ・モデル
- UserSimilarity
- アイテム類似性
- UserNeighborhood
- 推薦者
データストアからデータモデルが準備され、レコメンダーエンジンへの入力として渡されます。 推奨エンジンは、特定のユーザー向けの推奨を生成します。 以下に推奨エンジンのアーキテクチャを示します。
レコメンダーエンジンのアーキテクチャ
Mahoutを使用してリコメンダーを構築する
簡単なレコメンダーを開発する手順は次のとおりです。
ステップ1:DataModelオブジェクトを作成する
*PearsonCorrelationSimilarity* クラスのコンストラクターには、製品のユーザー、アイテム、および設定の詳細を含むファイルを保持するデータモデルオブジェクトが必要です。 サンプルデータモデルファイルは次のとおりです。
1,00,1.0
1,01,2.0
1,02,5.0
1,03,5.0
1,04,5.0
2,00,1.0
2,01,2.0
2,05,5.0
2,06,4.5
2,02,5.0
3,01,2.5
3,02,5.0
3,03,4.0
3,04,3.0
4,00,5.0
4,01,5.0
4,02,5.0
4,03,0.0
*DataModel* オブジェクトには、入力ファイルのパスを含むファイルオブジェクトが必要です。 以下に示すように、 *DataModel* オブジェクトを作成します。
DataModel datamodel = new FileDataModel(new File("input file"));
ステップ2:UserSimilarityオブジェクトを作成する
以下に示すように、 PearsonCorrelationSimilarity クラスを使用して UserSimilarity オブジェクトを作成します。
UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);
ステップ3:UserNeighborhoodオブジェクトを作成する
このオブジェクトは、特定のユーザーのようなユーザーの「近傍」を計算します。 近隣には2つのタイプがあります。
- NearestNUserNeighborhood -このクラスは近傍を計算します 特定のユーザーに最も近い_n_ユーザーで構成されます。 「最近接」は、指定されたUserSimilarityによって定義されます。
- ThresholdUserNeighborhood -このクラスは近傍を計算します 特定のユーザーとの類似性が特定のしきい値以上であるすべてのユーザーで構成されます。 類似性は、指定されたUserSimilarityによって定義されます。
ここでは ThresholdUserNeighborhood を使用し、優先度の制限を3.0に設定しています。
UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, model);
ステップ4:リコメンダーオブジェクトの作成
*UserbasedRecomender* オブジェクトを作成します。 以下に示すように、上記で作成したすべてのオブジェクトをコンストラクターに渡します。
UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
ステップ5:アイテムをユーザーに推奨する
*Recommender* インターフェースのRecommended()メソッドを使用して、ユーザーに製品を推奨します。 このメソッドには2つのパラメーターが必要です。 1つ目は、推奨事項を送信する必要があるユーザーのユーザーIDを表し、2つ目は、送信する推奨事項の数を表します。 * recommender()*メソッドの使用法は次のとおりです。
List<RecommendedItem> recommendations = recommender.recommend(2, 3);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
プログラム例
以下は、推奨を設定するためのプログラム例です。 ユーザーID 2のユーザーの推奨事項を準備します。
import java.io.File;
import java.util.List;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
public class Recommender {
public static void main(String args[]){
try{
//Creating data model
DataModel datamodel = new FileDataModel(new File("data"));//data
//Creating UserSimilarity object.
UserSimilarity usersimilarity = new PearsonCorrelationSimilarity(datamodel);
//Creating UserNeighbourHHood object.
UserNeighborhood userneighborhood = new ThresholdUserNeighborhood(3.0, usersimilarity, datamodel);
//Create UserRecomender
UserBasedRecommender recommender = new GenericUserBasedRecommender(datamodel, userneighborhood, usersimilarity);
List<RecommendedItem> recommendations = recommender.recommend(2, 3);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
}catch(Exception e){}
}
}
次のコマンドを使用してプログラムをコンパイルします。
javac Recommender.java
java Recommender
次の出力が生成されます。
RecommendedItem [item:3, value:4.5]
RecommendedItem [item:4, value:4.0]
Mahout-クラスタリング
クラスタリングは、特定のコレクションの要素またはアイテムを、アイテム間の類似性に基づいてグループに編成する手順です。 たとえば、オンラインニュースパブリッシングに関連するアプリケーションは、クラスタリングを使用してニュース記事をグループ化します。
クラスタリングの応用
- クラスタリングは、市場調査、パターン認識、データ分析、画像処理などの多くのアプリケーションで広く使用されています。
- クラスタリングは、マーケティング担当者が顧客ごとに異なるグループを発見するのに役立ちます。 また、購入パターンに基づいて顧客グループを特徴付けることができます。
- 生物学の分野では、植物および動物の分類法を導き出すために使用できます。 同様の機能を持つ遺伝子を分類し、集団に固有の構造に関する洞察を得ます。
- クラスタリングは、地球内の同様の土地利用の地域の特定に役立ちます 観測データベース。
- クラスタリングは、情報を得るためにWeb上のドキュメントを分類するのにも役立ちます 発見。
- クラスタリングは、クレジットの検出などの異常値検出アプリケーションで使用されます カード詐欺。
- クラスター分析は、データマイニング機能として、以下に関する洞察を得るためのツールとして機能します。 各クラスターの特性を観察するためのデータの分布。
Mahoutを使用すると、特定のデータセットをクラスター化できます。 必要な手順は次のとおりです。
- *アルゴリズム*適切なクラスタリングアルゴリズムを選択してグループ化する必要があります クラスターの要素。
- *類似性と非類似性*を確認するには、ルールを設定する必要があります 新しく出現した要素とグループ内の要素の類似性。
- *停止条件*クラスタリングが不要なポイントを定義するには、停止条件が必要です。
クラスタリングの手順
特定のデータをクラスター化するには、次の操作が必要です-
- Hadoopサーバーを起動します。 Hadoopファイルシステムにファイルを保存するために必要なディレクトリを作成します。 (キャノピーの場合は、入力ファイル、シーケンスファイル、およびクラスター化された出力のディレクトリを作成します)。
- 入力ファイルをUnixファイルシステムからHadoopファイルシステムにコピーします。
- 入力データからシーケンスファイルを準備します。
- 利用可能なクラスタリングアルゴリズムのいずれかを実行します。
- クラスター化されたデータを取得します。
Hadoopの開始
MahoutはHadoopと連携するため、Hadoopサーバーが稼働していることを確認してください。
$ cd HADOOP_HOME/bin
$ start-all.sh
入力ファイルディレクトリの準備
次のコマンドを使用して、Hadoopファイルシステムにディレクトリを作成し、入力ファイル、シーケンスファイル、クラスター化されたデータを保存します。
$ hadoop fs -p mkdir/mahout_data
$ hadoop fs -p mkdir/clustered_data
$ hadoop fs -p mkdir/mahout_seq
次のURLのhadoop Webインターフェイスを使用して、ディレクトリが作成されているかどうかを確認できます- http://localhost:50070/
以下に示す出力が得られます。
入力ファイルをHDFSにコピーする
次に、以下に示すように、入力データファイルをLinuxファイルシステムからHadoopファイルシステムのmahout_dataディレクトリにコピーします。 入力ファイルがmydata.txtで、/home/Hadoop/data/ディレクトリにあると仮定します。
$ hadoop fs -put/home/Hadoop/data/mydata.txt/mahout_data/
シーケンスファイルの準備
Mahoutは、指定された入力ファイルをシーケンスファイル形式に変換するユーティリティを提供します。 このユーティリティには2つのパラメーターが必要です。
- 元のデータが存在する入力ファイルディレクトリ。 *クラスター化されたデータが保存される出力ファイルディレクトリ。
以下に、mahout* seqdirectory *ユーティリティのヘルププロンプトを示します。
ステップ1: Mahoutホームディレクトリを参照します。 以下に示すように、ユーティリティのヘルプを取得できます。
[Hadoop@localhost bin]$ ./mahout seqdirectory --help
Job-Specific Options:
--input (-i) input Path to job input directory.
--output (-o) output The directory pathname for output.
--overwrite (-ow) If present, overwrite the output directory
次の構文を使用して、ユーティリティを使用してシーケンスファイルを生成します。
mahout seqdirectory -i <input file path> -o <output directory>
例
mahout seqdirectory
-i hdfs://localhost:9000/mahout_seq/
-o hdfs://localhost:9000/clustered_data/
クラスタリングアルゴリズム
Mahoutは、クラスタリング用の2つの主要なアルゴリズムをサポートしています。
- キャノピークラスタリング
- K平均クラスタリング
キャノピークラスタリング
キャノピークラスタリングは、クラスタリングの目的でMahoutが使用するシンプルで高速な手法です。 オブジェクトは、プレーンスペース内のポイントとして扱われます。 この手法は、k-meansクラスタリングなどの他のクラスタリング手法の最初のステップとしてよく使用されます。 次の構文を使用して、Canopyジョブを実行できます。
mahout canopy -i <input vectors directory>
-o <output directory>
-t1 <threshold value 1>
-t2 <threshold value 2>
Canopyジョブには、シーケンスファイルを含む入力ファイルディレクトリと、クラスター化されたデータを保存する出力ディレクトリが必要です。
例
mahout canopy -i hdfs://localhost:9000/mahout_seq/mydata.seq
-o hdfs://localhost:9000/clustered_data
-t1 20
-t2 30
指定された出力ディレクトリに生成されたクラスター化データを取得します。
K平均クラスタリング
K-meansクラスタリングは重要なクラスタリングアルゴリズムです。 k-meansクラスタリングアルゴリズムのkは、データを分割するクラスターの数を表します。 たとえば、このアルゴリズムに指定されたk値は3として選択され、アルゴリズムはデータを3つのクラスターに分割します。
各オブジェクトは、空間内のベクトルとして表されます。 最初は、アルゴリズムによってk個のポイントがランダムに選択され、センターとして扱われ、各センターに最も近いすべてのオブジェクトがクラスター化されます。 距離測定にはいくつかのアルゴリズムがあり、ユーザーは必要なものを選択する必要があります。
ベクターファイルの作成
- Canopyアルゴリズムとは異なり、k-meansアルゴリズムは入力としてベクトルファイルを必要とし、 したがって、ベクターファイルを作成する必要があります。
- シーケンスファイル形式からベクターファイルを生成するために、Mahoutは seq2parse ユーティリティ。
以下に、 seq2parse ユーティリティのオプションの一部を示します。 これらのオプションを使用してベクターファイルを作成します。
$MAHOUT_HOME/bin/mahout seq2sparse
--analyzerName (-a) analyzerName The class name of the analyzer
--chunkSize (-chunk) chunkSize The chunkSize in MegaBytes.
--output (-o) output The directory pathname for o/p
--input (-i) input Path to job input directory.
ベクトルを作成した後、k-meansアルゴリズムに進みます。 k-meansジョブを実行する構文は次のとおりです。
mahout kmeans -i <input vectors directory>
-c <input clusters directory>
-o <output working directory>
-dm <Distance Measure technique>
-x <maximum number of iterations>
-k <number of initial clusters>
K平均クラスタリングジョブには、入力ベクトルディレクトリ、出力クラスターディレクトリ、距離測定、実行する最大反復数、および入力データを分割するクラスターの数を表す整数値が必要です。
Mahout-分類
分類とは何ですか?
分類は、既知のデータを使用して、新しいデータを既存のカテゴリのセットに分類する方法を決定する機械学習手法です。 例えば、
- iTunesアプリケーションは、分類を使用してプレイリストを準備します。
- Yahoo!などのメールサービスプロバイダー Gmailはこの手法を使用して、新しいメールをスパムとして分類するかどうかを決定します。 分類アルゴリズムは、特定のメールをスパムとしてマークするユーザーの習慣を分析することにより、トレーニングを行います。 それに基づいて、分類子は、今後のメールを受信トレイまたはスパムフォルダーのどちらに保管するかを決定します。
分類の仕組み
特定のデータセットを分類する際、分類システムは次のアクションを実行します。
- 最初に、学習アルゴリズムのいずれかを使用して新しいデータモデルを準備します。
- 次に、準備されたデータモデルがテストされます。
- その後、このデータモデルを使用して、新しいデータを評価し、 そのクラス。
分類の適用
- クレジットカード詐欺の検出-分類メカニズムを使用して、クレジットカード詐欺を予測します。 分類器は、以前の不正行為の履歴情報を使用して、将来のどの取引が不正行為になる可能性があるかを予測できます。
- スパムメール-以前のスパムメールの特性に応じて、 分類子は、新たに検出された電子メールをスパムフォルダーに送信するかどうかを決定します。
単純ベイズ分類器
MahoutはNaive Bayes分類アルゴリズムを使用します。 次の2つの実装を使用します。
- 分散単純ベイズ分類
- 相補的な単純ベイズ分類
Naive Bayesは、分類器を構築するための単純な手法です。 これは、このような分類器をトレーニングするための単一のアルゴリズムではなく、アルゴリズムのファミリーです。 ベイズ分類器は、問題のあるインスタンスを分類するモデルを構築します。 これらの分類は、利用可能なデータを使用して行われます。
単純ベイズの利点は、分類に必要なパラメーターを推定するために必要なトレーニングデータが少ないことです。
一部のタイプの確率モデルでは、教師なし学習設定で単純ベイズ分類器を非常に効率的にトレーニングできます。
単純化された仮定にもかかわらず、単純なベイズ分類器は、多くの複雑な実世界の状況で非常にうまく機能しました。
分類の手順
分類を実装するには、次の手順に従います。
- サンプルデータを生成する
- データからシーケンスファイルを作成する
- シーケンスファイルをベクトルに変換する
- ベクトルを訓練する
- ベクトルをテストする
ステップ1:サンプルデータの生成
分類するデータを生成またはダウンロードします。 たとえば、次のリンクから* 20ニュースグループ*のサンプルデータを取得できます。http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz
入力データを保存するディレクトリを作成します。 以下に示す例をダウンロードしてください。
$ mkdir classification_example
$ cd classification_example
$tar xzvf 20news-bydate.tar.gz
wget http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz
ステップ2:シーケンスファイルを作成する
*seqdirectory* ユーティリティを使用して、例からシーケンスファイルを作成します。 シーケンスを生成する構文は次のとおりです。
mahout seqdirectory -i <input file path> -o <output directory>
ステップ3:シーケンスファイルをベクターに変換する
*seq2parse* ユーティリティを使用して、シーケンスファイルからベクターファイルを作成します。 *seq2parse* ユーティリティのオプションは次のとおりです。
$MAHOUT_HOME/bin/mahout seq2sparse
--analyzerName (-a) analyzerName The class name of the analyzer
--chunkSize (-chunk) chunkSize The chunkSize in MegaBytes.
--output (-o) output The directory pathname for o/p
--input (-i) input Path to job input directory.
ステップ4:ベクトルのトレーニング
*trainnb* ユーティリティを使用して、生成されたベクトルをトレーニングします。 *trainnb* ユーティリティを使用するオプションは次のとおりです。
mahout trainnb
-i ${PATH_TO_TFIDF_VECTORS}
-el
-o ${PATH_TO_MODEL}/model
-li ${PATH_TO_MODEL}/labelindex
-ow
-c
ステップ5:ベクターをテストする
*testnb* ユーティリティを使用してベクターをテストします。 *testnb* ユーティリティを使用するオプションは次のとおりです。
mahout testnb
-i ${PATH_TO_TFIDF_TEST_VECTORS}
-m ${PATH_TO_MODEL}/model
-l ${PATH_TO_MODEL}/labelindex
-ow
-o ${PATH_TO_OUTPUT}
-c
-seq
Mahout-便利なリソース
次のリソースには、Mahoutに関する追加情報が含まれています。 これについての詳細な知識を得るためにそれらを使用してください。
Mahoutの便利なリンク
- Mahout-Mahoutの公式サイト。
- Mahout Wikipedia-Mahoutのウィキペディア
Mahoutに関する便利な本
- image:https://images-na.ssl-images-amazon.com/I/51RzkfSSfBL。 jpg [行動中の象使い]
- http://www.amazon.com/Machine-Learning-Science-Algorithms-Sense/dp/1107422221/httpwwwtuto0a-20[機械学習:データを理解するアルゴリズムの技術と科学
- [[File:]]
- [[File:]]
- [[File:]]
- [[File:]]
このページにサイトを登録するには、 contact @ finddevguides.com にメールを送信してください。