В попередньому пості я описувала, як порахувати подібність між користувачами на Pig. Основна перевага використання Pig - MapReduce завдання створяться і виконаються на основі вашого Pig скрипта. Використання технології MapReduce виправдане тільки у випадку розподілених обчислень, тобто потрібно мати або Hadoop кластер з реальних машин, або орендувати хмарний кластер. Сьогодні я опишу як підняти кластер на Amazon Web Services та запустити розподілений обрахунок подібності користувачів.
Показ дописів із міткою recommender systems. Показати всі дописи
Показ дописів із міткою recommender systems. Показати всі дописи
четвер, 7 серпня 2014 р.
понеділок, 4 серпня 2014 р.
Обрахунок подібності між користувачами з допомогою Pig
Apache Pig - високорівнева процедурна мова, яка дозволяє здійснювати SQL-подібні запити до великих датасетів з використанням платформ Hadoop та MapReduce. Сьогодні я опишу як з допомогою Pig можна вирішувати стандартну задачу визначення подібності між користувачами на прикладі даних з kaggle змагання Acquire Valued Shoppers Challenge.
четвер, 6 лютого 2014 р.
Встановлення Apache Mahout.
Отже, сьогодні розглянемо деякі технічні деталі, які допожуть встановити Apache Mahout на Ubuntu 12.04:
1. Встановлюємо Hadoop:
cd ~/Downloads
wget http://mirror.rmg.io/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0.tar.gz
sudo cp hadoop-2.2.0.tar.gz /usr/local
cd /usr/local
sudo tar -zxvf hadoop-2.2.0.tar.gz
export HADOOP_HOME=/usr/local/hadoop-2.2.0
export PATH=$PATH:$HADOOP_HOME/bin
Set up variables pemanently:
sudo gedit /etc/environment
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop-2.2.0
add to PATH line ":HADOOP_HOME/bin"
2. Тестуємо:
$HADOOP_HOME/bin/hadoop
Якщо все встановлено правильно, ви побачите щось на зразок: Usage: hadoop [--config confdir] COMMAND
where COMMAND is one of:
fs run a generic filesystem user client
version print the version
jar <jar> run a jar file
checknative [-a|-h] check native hadoop and compression libraries availability
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
classpath prints the class path needed to get the
Hadoop jar and the required libraries
daemonlog get/set the log level for each daemon
or
CLASSNAME run the class named CLASSNAME
3. Встановлюємо Maven та перевіряємо чи все встановилось коректно:
sudo apt-get install maven
mvn -version
4. І, нарешті, сам Mahout:
5. Cтворємо новий Maven "Hello world" проект:
6. Пишемо найпростішу рекомендаційну систему:
Створюємо папку datasets у папці проекту, яка міститиме файл dummy-bool.csv з наступним вмістом:
Тепер, безпосередньо, сам рекомендаційний скрипт. Створюємо файл UnresystBoolRecommend.java та поміщаємо його у src/main/java/com/unresyst/ нашого проекту. Код:
Якщо вам не вдасться відворити якийсь з вищенаведених кроків, відповідь можна знати серед цих ресурсів:
http://drunks-and-lampposts.com/2013/06/09/mahout-for-r-users/
http://codesfusion.blogspot.com/2013/10/setup-hadoop-2x-220-on-ubuntu.html?m=1
http://acadmedia.wku.edu/Pavan/Mahout_in_Action.pdf
https://code.google.com/p/unresyst/wiki/CreateMahoutRecommender
cd ~/Downloads
wget http://apache-mirror.telesys.org.ua/mahout/0.8/mahout-distribution-0.8-src.tar.gz
sudo tar -zxvf mahout-distribution-0.8-src.tar.gz
sudo cp -r ~/Downloads/mahout-distribution-0.8 /usr/local
sudo mv mahout-distribution-0.8 mahout
cd mahout/core
sudo mvn -DskipTests install
cd mahout/examples
sudo mvn install
5. Cтворємо новий Maven "Hello world" проект:
cd /usr/local/mahout
sudo mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.unresyst -DartifactId=mahoutrec
cd mahoutrec
sudo mvn compile
sudo mvn exec:java -Dexec.mainClass="com.unresyst.App" [print Hello world]
Додаємо Mahout залежності до pom.xml: <dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-core</artifactId>
<version>0.8</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-math</artifactId>
<version>0.8</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-math</artifactId>
<version>0.8</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-utils</artifactId>
<version>0.8</version>
</dependency>
Компілюємо maven проект: mvn compile
6. Пишемо найпростішу рекомендаційну систему:
Створюємо папку datasets у папці проекту, яка міститиме файл dummy-bool.csv з наступним вмістом:
#userId,itemId
1,3
1,4
2,44
2,46
3,3
3,5
3,6
4,3
4,5
4,11
4,44
5,1
5,2
5,4
В даному випадку, це інформація про продукти, обрані користувачем (куплені, переглянуті, скачані). Наприклад, користувач з ID =5 обрав продукти 1, 2 та 4.Тепер, безпосередньо, сам рекомендаційний скрипт. Створюємо файл UnresystBoolRecommend.java та поміщаємо його у src/main/java/com/unresyst/ нашого проекту. Код:
package com.unresyst;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.List;
import java.io.IOException;
import org.apache.commons.cli2.OptionException;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.recommender.CachingRecommender;
import org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
public class UnresystBoolRecommend {
public static void main(String... args) throws FileNotFoundException, TasteException, IOException, OptionException {
// create data source (model) - from the csv file
File ratingsFile = new File("datasets/dummy-bool.csv");
DataModel model = new FileDataModel(ratingsFile);
// create a simple recommender on our data
CachingRecommender cachingRecommender = new CachingRecommender(new SlopeOneRecommender(model));
// for all users
for (LongPrimitiveIterator it = model.getUserIDs(); it.hasNext();){
long userId = it.nextLong();
// get the recommendations for the user
List<RecommendedItem> recommendations = cachingRecommender.recommend(userId, 10);
// if empty write something
if (recommendations.size() == 0){
System.out.print("User ");
System.out.print(userId);
System.out.println(": no recommendations");
}
// print the list of recommendations for each
for (RecommendedItem recommendedItem : recommendations) {
System.out.print("User ");
System.out.print(userId);
System.out.print(": ");
System.out.println(recommendedItem);
}
}
}
}
Компілюємо проект: mvn compile
Запускаємо рекомендаційний скрипт: mvn exec:java -Dexec.mainClass="com.unresyst.UnresystBoolRecommend"
Отримуємо рекомендації для кожного користувача: User 1: RecommendedItem[item:5, value:1.0]
User 2: RecommendedItem[item:5, value:1.0]
User 2: RecommendedItem[item:3, value:1.0]
User 3: no recommendations
User 4: no recommendations
User 5: RecommendedItem[item:5, value:1.0]
User 5: RecommendedItem[item:3, value:1.0]
Якщо вам не вдасться відворити якийсь з вищенаведених кроків, відповідь можна знати серед цих ресурсів:
http://drunks-and-lampposts.com/2013/06/09/mahout-for-r-users/
http://codesfusion.blogspot.com/2013/10/setup-hadoop-2x-220-on-ubuntu.html?m=1
http://acadmedia.wku.edu/Pavan/Mahout_in_Action.pdf
https://code.google.com/p/unresyst/wiki/CreateMahoutRecommender
середа, 5 лютого 2014 р.
четвер, 9 січня 2014 р.
Mahout: встановлення і знайомство.
Mahout - відкрита бібілотека для машинного навчання від Apache. Це фреймоворк, написаний на Java, який дозволяє використовувати можливості Hadoop для паралелізації алгоритмів машинного навчання. Відокремився у 2008 році від проекту Apache Lucene (відкрита бібліотека швидкого повноготестовго пошуку)
Основні завдання, які допомагає вирішувати Mahout:
Ознайомитись з повним переліком алгоритмів можна тут: https://cwiki.apache.org/confluence/display/MAHOUT/Algorithms
Для того, щоб поекспериментувати з Mahout, можна почати з тьюторіала від IBM:
http://www.ibm.com/developerworks/ru/library/j-mahout/.
Для того, щоб запрацювали приклади з цієї статті достатньо встановити JDK, Ant та завантажити приклад коду.
В Ubuntu 12.04 все досить просто:
Встановлюємо JDK:
В наступних статтях розглянeмо встановлення Mahout + Maven + Hadoop та огляд книги Mahout in Action.
Основні завдання, які допомагає вирішувати Mahout:
- Рекомендаційна система
- Кластеризація
- Класифікація
- User-user та item-item алгоритми колаборативної фільтрації
- Рекомендаційні алгоритми на основі факторизації матриці уподобань користувачів
- k-means та fuzzy k-means кластеризація
- Latent Dirichlet Allocation
- Singular Value Decomposition
- Логістична регресія
- Наївний класифікатор Байеса
- Random forest
Ознайомитись з повним переліком алгоритмів можна тут: https://cwiki.apache.org/confluence/display/MAHOUT/Algorithms
Для того, щоб поекспериментувати з Mahout, можна почати з тьюторіала від IBM:
http://www.ibm.com/developerworks/ru/library/j-mahout/.
Для того, щоб запрацювали приклади з цієї статті достатньо встановити JDK, Ant та завантажити приклад коду.
В Ubuntu 12.04 все досить просто:
Встановлюємо JDK:
sudo apt-get update
sudo apt-get install openjdk-7-jdk
Вказуємо JAVA_HOME: export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
Розпаковуємо приклад коду: unzip sample.zip
cd apache-mahout-examples
Запускаємо ant install
для того, щоб скомпілювати код та завантажити датасет, який містить близько 2.5Гб інформації з Вікіпедії. Час обробки залежить від пропускної здатності інтернет-з'єднання. Якщо все пройшло успішно, вас чекає подібне до цього повідомлення: BUILD SUCCESSFUL
Total time: 104 minutes 16 seconds
Після цього мають працювати всі приклади, описані в статті.В наступних статтях розглянeмо встановлення Mahout + Maven + Hadoop та огляд книги Mahout in Action.
вівторок, 10 грудня 2013 р.
Рекомендаційні системи. Огляд
Ще коротший огляд українською:
Підписатися на:
Дописи (Atom)