目前最新的是0.9版 但是官方0.9的版本超舊 還是用hadoop 1.x編譯的 所以當我們在呼叫mahout的Lib時會有以下error
所以一定要重新下載source code自行編譯 不要用官方提供的版本...
首先假設大家都裝好maven和git了
git clone https://github.com/apache/mahout.git
(我下載到路徑/opt 它會自動在底下建立一個mahout資料夾)
cd /opt/mahout
開始編譯
mvn clean install -Dhadoop2 -Dhadoop.2.version=2.6.0 -DskipTests
mvn -Dhadoop2.version=2.6.0 clean package -DskipTests
vi ~/.bashrc
export MAHOUT_HOME=/opt/mahout
export PATH=$MAHOUT_HOME/bin:$PATH
export MAHOUT_LOCAL=
source ~/.bashrc
1. mahout最大的貢獻和用處就是他的Libarary已經包含了許多推薦系統會用到的分群演算法
如K-means和Canopy Clusting直接呼叫就可以使用
先從下面的網站了解這兩種演算法的意義吧
http://www.dotblogs.com.tw/dragon229/archive/2013/02/04/89919.aspx
http://blog.pureisle.net/archives/2045.html
下載範例資料
cd /home
wget http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data
在HDFS裡建一個暫存資料夾
hadoop fs -mkdir /testdata
把資料放入HDFS
hadoop fs -put /home/synthetic_control.data /testdata
先試試canopy clustering
mahout org.apache.mahout.clustering.syntheticcontrol.canopy.Job -t1 3 -t2 2 -i /testdata/synthetic_control.data -o /output
t1需要大於t2
檢查輸出
hadoop fs -ls /output/data
從FS下載下來的part-m-00000都是亂碼 使用seqdumper
mahout seqdumper --input /output/data/part-m-00000 --output /output2.txt
output2.txt會在local端
直接vi output2.txt查看
也可以使用K-means分群
mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job -t1 3 -t2 2 -i /testdata/synthetic_control.data -o /output
2. 協同過濾 Collaborative Filtering
先了解CF explicit, implicit, user-based, item-based分 別是什麼
http://cofounderinc.com/2013/04/06/collaborative-filtering/
http://divakalife.blogspot.tw/2010/04/data-mining-collaborative-filtering.html
|
|
A |
B |
C |
D |
|
USER1 |
2 |
4 |
1 |
5 |
|
USER2 |
1 |
2 |
3 |
? |
|
USER3 |
3 |
4 |
? |
1 |
|
USER4 |
5 |
3 |
2 |
4 |
|
USER5 |
1 |
5 |
3 |
2 |
我們需要算出?的值來決定要不要推薦C物品給USER3 或D物品給USER2
首先創造table
vi cf.data
1,1,2
1,2,4
1,3,1
1,4,5
2,1,1
2,2,2
2,3,3
3,1,3
3,2,4
3,4,1
4,1,5
4,2,3
4,3,2
4,4,4
5,1,1
5,2,5
5,3,3
5,4,2
把資料放進HDFS裡
hadoop fs -mkdir /cftest
hadoop fs -put /tmp/cf.data /cftest/
執行
mahout recommenditembased -s SIMILARITY_EUCLIDEAN_DISTANCE -i /cftest/cf.data -o /cfoutput
紅字的地方可以替換成不同的演算法
SIMILARITY_COOCCURRENCE
SIMILARITY_LOGLIKELIHOOD
SIMILARITY_TANIMOTO_COEFFICIENT
SIMILARITY_CITY_BLOCK
SIMILARITY_COSINE
SIMILARITY_PEARSON_CORRELATION
SIMILARITY_EUCLIDEAN_DISTANCE