Mahout - Hướng dẫn nhanh
Chúng ta đang sống trong thời đại mà thông tin có sẵn rất nhiều. Tình trạng quá tải thông tin đã tăng lên đến mức đôi khi trở nên khó quản lý các hộp thư nhỏ của chúng ta! Hãy tưởng tượng khối lượng dữ liệu và hồ sơ mà một số trang web phổ biến (như Facebook, Twitter và Youtube) phải thu thập và quản lý hàng ngày. Không có gì lạ, ngay cả khi các trang web ít được biết đến cũng nhận được một lượng lớn thông tin hàng loạt.
Thông thường, chúng ta dựa vào các thuật toán khai thác dữ liệu để phân tích dữ liệu hàng loạt để xác định xu hướng và đưa ra kết luận. Tuy nhiên, không có thuật toán khai thác dữ liệu nào có thể đủ hiệu quả để xử lý các tập dữ liệu rất lớn và cung cấp kết quả trong thời gian nhanh chóng, trừ khi các tác vụ tính toán được chạy trên nhiều máy được phân phối qua đám mây.
Giờ đây, chúng tôi có các khung công tác mới cho phép chúng tôi chia tác vụ tính toán thành nhiều phân đoạn và chạy từng phân đoạn trên một máy khác nhau. Mahout là một khung khai thác dữ liệu thường chạy cùng với cơ sở hạ tầng Hadoop ở nền của nó để quản lý khối lượng dữ liệu khổng lồ.
Apache Mahout là gì?
Một quản tượng là người lái một con voi như là bậc thầy của mình. Cái tên này xuất phát từ sự liên kết chặt chẽ của nó với Apache Hadoop sử dụng một con voi làm biểu tượng của nó.
Hadoop là một khung công tác mã nguồn mở của Apache cho phép lưu trữ và xử lý dữ liệu lớn trong môi trường phân tán trên các cụm máy tính sử dụng các mô hình lập trình đơn giản.
Apache Mahoutlà một dự án mã nguồn mở chủ yếu được sử dụng để tạo các thuật toán học máy có thể mở rộng. Nó triển khai các kỹ thuật học máy phổ biến như:
- Recommendation
- Classification
- Clustering
Apache Mahout bắt đầu như một dự án con của Lucene của Apache vào năm 2008. Năm 2010, Mahout trở thành một dự án cấp cao nhất của Apache.
Đặc điểm của Mahout
Các tính năng ban đầu của Apache Mahout được liệt kê dưới đây.
Các thuật toán của Mahout được viết trên Hadoop, vì vậy nó hoạt động tốt trong môi trường phân tán. Mahout sử dụng thư viện Apache Hadoop để mở rộng quy mô hiệu quả trên đám mây.
Mahout cung cấp cho người lập trình một khuôn khổ sẵn sàng sử dụng để thực hiện các tác vụ khai thác dữ liệu trên khối lượng lớn dữ liệu.
Mahout cho phép các ứng dụng phân tích tập hợp dữ liệu lớn một cách hiệu quả và nhanh chóng.
Bao gồm một số triển khai phân nhóm được hỗ trợ MapReduce như k-mean, k-mean mờ, Canopy, Dirichlet và Mean-Shift.
Hỗ trợ triển khai phân loại Naive Bayes phân tán và triển khai phân loại Naive Bayes bổ sung.
Đi kèm với các khả năng chức năng thể dục phân tán để lập trình tiến hóa.
Bao gồm các thư viện ma trận và vector.
Các ứng dụng của Mahout
Các công ty như Adobe, Facebook, LinkedIn, Foursquare, Twitter và Yahoo sử dụng Mahout trong nội bộ.
Foursquare giúp bạn tìm ra các địa điểm, thức ăn và giải trí có sẵn trong một khu vực cụ thể. Nó sử dụng công cụ giới thiệu của Mahout.
Twitter sử dụng Mahout để lập mô hình sở thích của người dùng.
Yahoo! sử dụng Mahout để khai thác mẫu.
Apache Mahout là một thư viện học máy có khả năng mở rộng cao cho phép các nhà phát triển sử dụng các thuật toán được tối ưu hóa. Mahout triển khai các kỹ thuật học máy phổ biến như khuyến nghị, phân loại và phân cụm. Do đó, cần thận trọng khi có một phần ngắn gọn về học máy trước khi chúng ta tiến xa hơn.
Học máy là gì?
Học máy là một nhánh của khoa học liên quan đến việc lập trình các hệ thống theo cách mà chúng tự động học hỏi và cải thiện theo kinh nghiệm. Ở đây, học có nghĩa là nhận ra và hiểu dữ liệu đầu vào và đưa ra quyết định khôn ngoan dựa trên dữ liệu được cung cấp.
Rất khó để đưa ra tất cả các quyết định dựa trên tất cả các đầu vào có thể. Để giải quyết vấn đề này, các thuật toán được phát triển. Các thuật toán này xây dựng kiến thức từ dữ liệu cụ thể và kinh nghiệm trong quá khứ với các nguyên tắc thống kê, lý thuyết xác suất, logic, tối ưu hóa tổ hợp, tìm kiếm, học củng cố và lý thuyết điều khiển.
Các thuật toán được phát triển tạo nền tảng cho các ứng dụng khác nhau như:
- Xử lý tầm nhìn
- Xử lý ngôn ngữ
- Dự báo (ví dụ: xu hướng thị trường chứng khoán)
- Nhận dạng mẫu
- Games
- Khai thác dữ liệu
- Những hệ thống chuyên gia
- Robotics
Học máy là một lĩnh vực rộng lớn và nó nằm ngoài phạm vi của hướng dẫn này để bao gồm tất cả các tính năng của nó. Có một số cách để triển khai các kỹ thuật học máy, tuy nhiên những cách thường được sử dụng nhất làsupervised và unsupervised learning.
Học tập có giám sát
Học tập có giám sát giải quyết việc học một chức năng từ dữ liệu đào tạo có sẵn. Thuật toán học có giám sát phân tích dữ liệu đào tạo và tạo ra một hàm suy luận, có thể được sử dụng để ánh xạ các ví dụ mới. Các ví dụ phổ biến về học có giám sát bao gồm:
- phân loại e-mail là thư rác,
- gắn nhãn các trang web dựa trên nội dung của chúng và
- nhận diện giọng nói.
Có nhiều thuật toán học có giám sát như mạng nơ-ron, Máy vectơ hỗ trợ (SVM) và bộ phân loại Naive Bayes. Mahout triển khai trình phân loại Naive Bayes.
Học tập không giám sát
Học không giám sát có nghĩa là dữ liệu không được gắn nhãn mà không có bất kỳ tập dữ liệu xác định trước nào để đào tạo. Học tập không giám sát là một công cụ cực kỳ mạnh mẽ để phân tích dữ liệu có sẵn và tìm kiếm các mẫu và xu hướng. Nó được sử dụng phổ biến nhất để phân cụm đầu vào tương tự thành các nhóm logic. Các cách tiếp cận phổ biến để học tập không giám sát bao gồm:
- k-means
- bản đồ tự tổ chức và
- phân cụm phân cấp
sự giới thiệu
Đề xuất là một kỹ thuật phổ biến cung cấp các đề xuất gần đúng dựa trên thông tin của người dùng, chẳng hạn như các lần mua, nhấp chuột và xếp hạng trước đó.
Amazon sử dụng kỹ thuật này để hiển thị danh sách các mục được đề xuất mà bạn có thể quan tâm, rút ra thông tin từ các hành động trước đây của bạn. Có các công cụ đề xuất hoạt động đằng sau Amazon để nắm bắt hành vi của người dùng và đề xuất các mặt hàng đã chọn dựa trên các hành động trước đó của bạn.
Facebook sử dụng kỹ thuật giới thiệu để xác định và giới thiệu “danh sách những người bạn có thể biết”.
Phân loại
Phân loại, còn được gọi là categorization, là một kỹ thuật máy học sử dụng dữ liệu đã biết để xác định cách dữ liệu mới sẽ được phân loại thành một tập hợp các danh mục hiện có. Phân loại là một hình thức học tập có giám sát.
Các nhà cung cấp dịch vụ thư như Yahoo! và Gmail sử dụng kỹ thuật này để quyết định xem một thư mới có được phân loại là thư rác hay không. Thuật toán phân loại tự đào tạo bằng cách phân tích thói quen đánh dấu một số thư nhất định của người dùng là thư rác. Dựa vào đó, bộ phân loại quyết định xem một thư trong tương lai sẽ được gửi vào hộp thư đến của bạn hay trong thư mục thư rác.
Ứng dụng iTunes sử dụng phân loại để chuẩn bị danh sách phát.
Phân cụm
Phân cụm được sử dụng để tạo thành các nhóm hoặc cụm dữ liệu tương tự nhau dựa trên các đặc điểm chung. Clustering là một hình thức học tập không có giám sát.
Các công cụ tìm kiếm như Google và Yahoo! sử dụng kỹ thuật phân cụm để nhóm dữ liệu có đặc điểm tương tự.
Nhóm tin sử dụng kỹ thuật phân cụm để nhóm các bài báo khác nhau dựa trên các chủ đề liên quan.
Công cụ phân cụm sẽ xem xét toàn bộ dữ liệu đầu vào và dựa trên các đặc điểm của dữ liệu, nó sẽ quyết định nó nên được nhóm theo cụm nào. Hãy xem ví dụ sau.
Thư viện hướng dẫn của chúng tôi chứa các chủ đề về các chủ đề khác nhau. Khi chúng tôi nhận được một hướng dẫn mới tại TutorialsPoint, nó sẽ được xử lý bởi một công cụ phân cụm quyết định, dựa trên nội dung của nó, nơi nó sẽ được nhóm lại.
Chương này hướng dẫn bạn cách thiết lập mahout. Java và Hadoop là điều kiện tiên quyết của mahout. Dưới đây là các bước để tải xuống và cài đặt Java, Hadoop và Mahout.
Cài đặt trước cài đặt
Trước khi cài đặt Hadoop vào môi trường Linux, chúng ta cần thiết lập Linux bằng ssh(Vỏ an toàn). Làm theo các bước được đề cập bên dưới để thiết lập môi trường Linux.
Tạo người dùng
Bạn nên tạo một người dùng riêng cho Hadoop để cô lập hệ thống tệp Hadoop khỏi hệ thống tệp Unix. Làm theo các bước dưới đây để tạo người dùng:
Mở root bằng lệnh “su”.
- Tạo người dùng từ tài khoản gốc bằng lệnh “useradd username”.
Bây giờ bạn có thể mở một tài khoản người dùng hiện có bằng lệnh “su username”.
Mở thiết bị đầu cuối Linux và nhập các lệnh sau để tạo người dùng.
$ su
password:
# useradd hadoop
# passwd hadoop
New passwd:
Retype new passwd
Thiết lập SSH và tạo khóa
Cần thiết lập SSH để thực hiện các hoạt động khác nhau trên một cụm chẳng hạn như khởi động, dừng và các hoạt động trình bao daemon phân tán. Để xác thực những người dùng khác nhau của Hadoop, cần phải cung cấp cặp khóa công khai / riêng tư cho người dùng Hadoop và chia sẻ nó với những người dùng khác nhau.
Các lệnh sau được sử dụng để tạo một cặp giá trị khóa bằng cách sử dụng SSH, sao chép các khóa công khai dạng id_rsa.pub sang ủy quyền_key và cung cấp quyền sở hữu, đọc và ghi đối với tệp ủy quyền.
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
Xác minh ssh
ssh localhost
Cài đặt Java
Java là điều kiện tiên quyết chính cho Hadoop và HBase. Trước hết, bạn nên xác minh sự tồn tại của Java trong hệ thống của mình bằng cách sử dụng “java -version”. Cú pháp của lệnh phiên bản Java được đưa ra dưới đây.
$ java -version
Nó sẽ tạo ra kết quả sau.
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)
Nếu bạn chưa cài đặt Java trong hệ thống của mình, hãy làm theo các bước dưới đây để cài đặt Java.
Step 1
Tải xuống java (JDK <phiên bản mới nhất> - X64.tar.gz) bằng cách truy cập liên kết sau: Oracle
Sau đó jdk-7u71-linux-x64.tar.gz is downloaded vào hệ thống của bạn.
Step 2
Nói chung, bạn tìm thấy tệp Java đã tải xuống trong thư mục Tải xuống. Xác minh nó và trích xuấtjdk-7u71-linux-x64.gz sử dụng các lệnh sau.
$ 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
Step 3
Để cung cấp Java cho tất cả người dùng, bạn cần di chuyển nó đến vị trí “/ usr / local /”. Mở thư mục gốc và gõ các lệnh sau.
$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit
Step 4
Để thiết lập PATH và JAVA_HOME biến, thêm các lệnh sau vào ~/.bashrc file.
export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH= $PATH:$JAVA_HOME/bin
Bây giờ, hãy xác minh java -version lệnh từ thiết bị đầu cuối như đã giải thích ở trên.
Tải xuống Hadoop
Sau khi cài đặt Java, ban đầu bạn cần cài đặt Hadoop. Xác minh sự tồn tại của Hadoop bằng lệnh “Phiên bản Hadoop” như hình dưới đây.
hadoop version
Nó sẽ tạo ra kết quả sau:
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
Nếu hệ thống của bạn không thể định vị Hadoop, hãy tải xuống Hadoop và cài đặt nó trên hệ thống của bạn. Làm theo các lệnh dưới đây để làm như vậy.
Tải xuống và giải nén hadoop-2.6.0 từ nền tảng phần mềm apache bằng các lệnh sau.
$ 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
Cài đặt Hadoop
Cài đặt Hadoop ở bất kỳ chế độ nào được yêu cầu. Ở đây, chúng tôi đang trình bày các chức năng của HBase trong chế độ phân phối giả, do đó hãy cài đặt Hadoop ở chế độ phân phối giả.
Làm theo các bước dưới đây để cài đặt Hadoop 2.4.1 trên hệ thống của bạn.
Bước 1: Thiết lập Hadoop
Bạn có thể đặt các biến môi trường Hadoop bằng cách thêm các lệnh sau vào ~/.bashrc tập tin.
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
Bây giờ, hãy áp dụng tất cả các thay đổi vào hệ thống hiện đang chạy.
$ source ~/.bashrc
Bước 2: Cấu hình Hadoop
Bạn có thể tìm thấy tất cả các tệp cấu hình Hadoop tại vị trí “$ HADOOP_HOME / etc / hadoop”. Bắt buộc phải thực hiện các thay đổi trong các tệp cấu hình đó theo cơ sở hạ tầng Hadoop của bạn.
$ cd $HADOOP_HOME/etc/hadoop
Để phát triển các chương trình Hadoop trong Java, bạn cần đặt lại các biến môi trường Java trong hadoop-env.sh tập tin bằng cách thay thế JAVA_HOME giá trị với vị trí của Java trong hệ thống của bạn.
export JAVA_HOME=/usr/local/jdk1.7.0_71
Dưới đây là danh sách các tệp mà bạn phải chỉnh sửa để định cấu hình Hadoop.
core-site.xml
Các core-site.xml tệp chứa thông tin như số cổng được sử dụng cho phiên bản Hadoop, bộ nhớ được cấp phát cho hệ thống tệp, giới hạn bộ nhớ để lưu trữ dữ liệu và kích thước của bộ đệm Đọc / Ghi.
Mở core-site.xml và thêm thuộc tính sau vào giữa các thẻ <configuration>, </configuration>:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
hdfs-site.xm
Các hdfs-site.xmltệp chứa thông tin như giá trị của dữ liệu sao chép, đường dẫn nút tên và đường dẫn nút dữ liệu của hệ thống tệp cục bộ của bạn. Nó có nghĩa là nơi bạn muốn lưu trữ cơ sở hạ tầng Hadoop.
Hãy giả sử dữ liệu sau:
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
Mở tệp này và thêm các thuộc tính sau vào giữa các thẻ <configuration>, </configuration> trong tệp này.
<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>
Note:Trong tệp trên, tất cả các giá trị thuộc tính do người dùng xác định. Bạn có thể thực hiện các thay đổi theo cơ sở hạ tầng Hadoop của mình.
mapred-site.xml
Tệp này được sử dụng để cấu hình sợi thành Hadoop. Mở tệp mapred-site.xml và thêm thuộc tính sau vào giữa các thẻ <configuration>, </configuration> trong tệp này.
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
mapred-site.xml
Tệp này được sử dụng để chỉ định khung MapReduce mà chúng tôi đang sử dụng. Theo mặc định, Hadoop chứa một mẫu mapred-site.xml. Trước hết, cần phải sao chép tệp từmapred-site.xml.template đến mapred-site.xml tập tin bằng lệnh sau.
$ cp mapred-site.xml.template mapred-site.xml
Mở mapred-site.xml và thêm các thuộc tính sau vào giữa các thẻ <configuration>, </configuration> trong tệp này.
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
Xác minh cài đặt Hadoop
Các bước sau được sử dụng để xác minh cài đặt Hadoop.
Bước 1: Đặt tên cho thiết lập nút
Thiết lập nút tên bằng lệnh “hdfs namenode -format” như sau:
$ cd ~
$ hdfs namenode -format
Kết quả mong đợi như sau:
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
************************************************************/
Bước 2: Xác minh dfs Hadoop
Lệnh sau được sử dụng để bắt đầu dfs. Lệnh này khởi động hệ thống tệp Hadoop của bạn.
$ start-dfs.sh
Sản lượng dự kiến như sau:
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]
Bước 3: Xác minh Tập lệnh Sợi
Lệnh sau được sử dụng để bắt đầu tập lệnh sợi. Thực hiện lệnh này sẽ bắt đầu quỷ sợi của bạn.
$ start-yarn.sh
Sản lượng dự kiến như sau:
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
Bước 4: Truy cập Hadoop trên trình duyệt
Số cổng mặc định để truy cập hadoop là 50070. Sử dụng URL sau để tải các dịch vụ Hadoop trên trình duyệt của bạn.
http://localhost:50070/
Bước 5: Xác minh tất cả các ứng dụng cho cụm
Số cổng mặc định để truy cập tất cả ứng dụng của cụm là 8088. Sử dụng URL sau để truy cập dịch vụ này.
http://localhost:8088/
Tải xuống Mahout
Mahout có sẵn trong trang web Mahout . Tải xuống Mahout từ liên kết được cung cấp trong trang web. Đây là ảnh chụp màn hình của trang web.
Bước 1
Tải xuống mahout Apache từ liên kết http://mirror.nexcess.net/apache/mahout/ bằng cách sử dụng lệnh sau.
[Hadoop@localhost ~]$ wget
http://mirror.nexcess.net/apache/mahout/0.9/mahout-distribution-0.9.tar.gz
Sau đó mahout-distribution-0.9.tar.gz sẽ được tải xuống trong hệ thống của bạn.
Bước 2
Duyệt qua thư mục nơi mahout-distribution-0.9.tar.gz được lưu trữ và giải nén tệp jar đã tải xuống như hình dưới đây.
[Hadoop@localhost ~]$ tar zxvf mahout-distribution-0.9.tar.gz
Kho lưu trữ Maven
Dưới đây là pom.xml để xây dựng Apache Mahout bằng Eclipse.
<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>
Chương này trình bày về kỹ thuật học máy phổ biến được gọi là recommendation, cơ chế của nó và cách viết một ứng dụng triển khai đề xuất Mahout.
sự giới thiệu
Đã bao giờ bạn tự hỏi làm thế nào Amazon đưa ra danh sách các mặt hàng được đề xuất để thu hút sự chú ý của bạn đến một sản phẩm cụ thể mà bạn có thể quan tâm!
Giả sử bạn muốn mua cuốn sách “Mahout in Action” từ Amazon:
Cùng với sản phẩm đã chọn, Amazon cũng hiển thị danh sách các mặt hàng được đề xuất liên quan, như hình dưới đây.
Danh sách đề xuất như vậy được tạo ra với sự trợ giúp của recommender engines. Mahout cung cấp các công cụ giới thiệu gồm một số loại như:
- người giới thiệu dựa trên người dùng,
- những người giới thiệu dựa trên mặt hàng và
- một số thuật toán khác.
Mahout Recommender Engine
Mahout có một công cụ giới thiệu không phân phối, không dựa trên Hadoop. Bạn nên chuyển một tài liệu văn bản có tùy chọn người dùng cho các mục. Và đầu ra của công cụ này sẽ là sở thích ước tính của một người dùng cụ thể đối với các mặt hàng khác.
Thí dụ
Xem xét một trang web bán hàng tiêu dùng như điện thoại di động, thiết bị và phụ kiện của họ. Nếu chúng tôi muốn triển khai các tính năng của Mahout trong một trang web như vậy, thì chúng tôi có thể xây dựng một công cụ giới thiệu. Công cụ này phân tích dữ liệu mua hàng trước đây của người dùng và đề xuất các sản phẩm mới dựa trên đó.
Các thành phần do Mahout cung cấp để xây dựng công cụ khuyến nghị như sau:
- DataModel
- UserSimilarity
- ItemSimilarity
- UserNeighborhood
- Recommender
Từ kho dữ liệu, mô hình dữ liệu được chuẩn bị và được chuyển làm đầu vào cho bộ máy khuyến nghị. Công cụ Recommender tạo ra các đề xuất cho một người dùng cụ thể. Dưới đây là kiến trúc của công cụ giới thiệu.
Kiến trúc của Công cụ giới thiệu
Xây dựng Đề xuất bằng Mahout
Dưới đây là các bước để phát triển một giới thiệu đơn giản:
Bước 1: Tạo đối tượng DataModel
Người xây dựng PearsonCorrelationSimilaritylớp yêu cầu một đối tượng mô hình dữ liệu, đối tượng này chứa một tệp chứa chi tiết Người dùng, Mục và Sở thích của một sản phẩm. Đây là tệp mô hình dữ liệu mẫu:
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
Các DataModelđối tượng yêu cầu đối tượng tệp, chứa đường dẫn của tệp đầu vào. TạoDataModel đối tượng như hình dưới đây.
DataModel datamodel = new FileDataModel(new File("input file"));
Bước 2: Tạo đối tượng UserSimilarity
Tạo nên UserSimilarity đối tượng sử dụng PearsonCorrelationSimilarity lớp như hình bên dưới:
UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);
Bước 3: Tạo đối tượng UserNeighborhood
Đối tượng này tính toán một "vùng lân cận" của người dùng như một người dùng nhất định. Có hai loại vùng lân cận:
NearestNUserNeighborhood- Lớp này tính toán một vùng lân cận bao gồm n người dùng gần nhất với một người dùng nhất định. "Gần nhất" được xác định bởi UserSimilarity đã cho.
ThresholdUserNeighborhood- Lớp này tính toán một vùng lân cận bao gồm tất cả những người dùng có sự tương đồng với người dùng đã cho đáp ứng hoặc vượt quá một ngưỡng nhất định. Tương tự được xác định bởi UserSimilarity đã cho.
Ở đây chúng tôi đang sử dụng ThresholdUserNeighborhood và đặt giới hạn ưu tiên thành 3.0.
UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, model);
Bước 4: Tạo đối tượng giới thiệu
Tạo nên UserbasedRecomendervật. Truyền tất cả các đối tượng đã tạo ở trên vào phương thức khởi tạo của nó như hình dưới đây.
UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
Bước 5: Đề xuất các mặt hàng cho người dùng
Đề xuất sản phẩm cho người dùng bằng phương thức recommend () của Recommendergiao diện. Phương thức này yêu cầu hai tham số. Đầu tiên đại diện cho id người dùng của người dùng mà chúng tôi cần gửi đề xuất và thứ hai đại diện cho số lượng đề xuất sẽ được gửi. Đây là cách sử dụng củarecommender() phương pháp:
List<RecommendedItem> recommendations = recommender.recommend(2, 3);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
Example Program
Dưới đây là một chương trình ví dụ để thiết lập đề xuất. Chuẩn bị các đề xuất cho người dùng với id người dùng 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){}
}
}
Biên dịch chương trình bằng các lệnh sau:
javac Recommender.java
java Recommender
Nó sẽ tạo ra kết quả sau:
RecommendedItem [item:3, value:4.5]
RecommendedItem [item:4, value:4.0]
Phân cụm là thủ tục để tổ chức các phần tử hoặc mục của một tập hợp nhất định thành các nhóm dựa trên sự giống nhau giữa các mục. Ví dụ, các ứng dụng liên quan đến xuất bản tin tức trực tuyến nhóm các tin bài của họ bằng cách sử dụng phân cụm.
Các ứng dụng của Clustering
Phân cụm được sử dụng rộng rãi trong nhiều ứng dụng như nghiên cứu thị trường, nhận dạng mẫu, phân tích dữ liệu và xử lý hình ảnh.
Phân nhóm có thể giúp các nhà tiếp thị khám phá các nhóm khác biệt trong cơ sở khách hàng của họ. Và họ có thể mô tả các nhóm khách hàng của mình dựa trên các mô hình mua hàng.
Trong lĩnh vực sinh học, nó có thể được sử dụng để xác định phân loại thực vật và động vật, phân loại các gen có chức năng tương tự và hiểu sâu hơn về cấu trúc vốn có trong quần thể.
Phân cụm giúp xác định các khu vực sử dụng đất tương tự trong cơ sở dữ liệu quan sát trái đất.
Phân cụm cũng giúp phân loại tài liệu trên web để khám phá thông tin.
Phân cụm được sử dụng trong các ứng dụng phát hiện ngoại lệ như phát hiện gian lận thẻ tín dụng.
Là một chức năng khai thác dữ liệu, Phân tích cụm đóng vai trò như một công cụ để hiểu sâu hơn về việc phân phối dữ liệu để quan sát các đặc điểm của từng cụm.
Sử dụng Mahout, chúng ta có thể phân cụm một tập dữ liệu nhất định. Các bước yêu cầu như sau:
Algorithm Bạn cần chọn một thuật toán phân cụm phù hợp để nhóm các phần tử của một cụm.
Similarity and Dissimilarity Bạn cần có một quy tắc để xác minh sự giống nhau giữa các phần tử mới gặp và các phần tử trong các nhóm.
Stopping Condition Điều kiện dừng là cần thiết để xác định điểm không cần phân cụm.
Quy trình phân cụm
Để phân cụm dữ liệu đã cho, bạn cần -
Khởi động máy chủ Hadoop. Tạo các thư mục cần thiết để lưu trữ tệp trong Hệ thống tệp Hadoop. (Tạo thư mục cho tệp đầu vào, tệp trình tự và đầu ra theo cụm trong trường hợp tán).
Sao chép tệp đầu vào vào hệ thống Tệp Hadoop từ hệ thống tệp Unix.
Chuẩn bị tệp trình tự từ dữ liệu đầu vào.
Chạy bất kỳ thuật toán phân cụm nào có sẵn.
Nhận dữ liệu được phân nhóm.
Khởi động Hadoop
Mahout làm việc với Hadoop, do đó đảm bảo rằng máy chủ Hadoop đang hoạt động.
$ cd HADOOP_HOME/bin
$ start-all.sh
Chuẩn bị thư mục tệp đầu vào
Tạo các thư mục trong hệ thống tệp Hadoop để lưu trữ tệp đầu vào, tệp trình tự và dữ liệu nhóm bằng cách sử dụng lệnh sau:
$ hadoop fs -p mkdir /mahout_data
$ hadoop fs -p mkdir /clustered_data
$ hadoop fs -p mkdir /mahout_seq
Bạn có thể xác minh xem thư mục có được tạo bằng giao diện web hadoop hay không trong URL sau: http://localhost:50070/
Nó cung cấp cho bạn kết quả như hình dưới đây:
Sao chép tệp đầu vào sang HDFS
Bây giờ, sao chép tệp dữ liệu đầu vào từ hệ thống tệp Linux vào thư mục mahout_data trong Hệ thống tệp Hadoop như hình dưới đây. Giả sử tệp đầu vào của bạn là mydata.txt và nó nằm trong thư mục / home / Hadoop / data /.
$ hadoop fs -put /home/Hadoop/data/mydata.txt /mahout_data/
Chuẩn bị tệp trình tự
Mahout cung cấp cho bạn một tiện ích để chuyển đổi tệp đầu vào đã cho sang định dạng tệp tuần tự. Tiện ích này yêu cầu hai tham số.
- Thư mục tệp đầu vào chứa dữ liệu gốc.
- Thư mục tệp đầu ra nơi dữ liệu được phân cụm sẽ được lưu trữ.
Dưới đây là lời nhắc trợ giúp của mahout seqdirectory tiện ích.
Step 1:Duyệt đến thư mục chính của Mahout. Bạn có thể nhận trợ giúp của tiện ích như hình dưới đây:
[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
Tạo tệp trình tự bằng tiện ích theo cú pháp sau:
mahout seqdirectory -i <input file path> -o <output directory>
Example
mahout seqdirectory
-i hdfs://localhost:9000/mahout_seq/
-o hdfs://localhost:9000/clustered_data/
Thuật toán phân cụm
Mahout hỗ trợ hai thuật toán chính để phân cụm cụ thể là:
- Phân cụm
- K-có nghĩa là phân cụm
Phân cụm
Phân cụm tán là một kỹ thuật đơn giản và nhanh chóng được Mahout sử dụng cho mục đích phân cụm. Các đối tượng sẽ được coi là điểm trong một không gian thuần túy. Kỹ thuật này thường được sử dụng như một bước khởi đầu trong các kỹ thuật phân cụm khác như phân cụm k-mean. Bạn có thể chạy công việc Canopy bằng cú pháp sau:
mahout canopy -i <input vectors directory>
-o <output directory>
-t1 <threshold value 1>
-t2 <threshold value 2>
Công việc Canopy yêu cầu một thư mục tệp đầu vào với tệp trình tự và một thư mục đầu ra nơi dữ liệu được phân cụm sẽ được lưu trữ.
Example
mahout canopy -i hdfs://localhost:9000/mahout_seq/mydata.seq
-o hdfs://localhost:9000/clustered_data
-t1 20
-t2 30
Bạn sẽ nhận được dữ liệu nhóm được tạo trong thư mục đầu ra đã cho.
K-có nghĩa là phân cụm
K-mean clustering là một thuật toán phân cụm quan trọng. Thuật toán phân cụm k trong k-mean biểu thị số lượng các cụm dữ liệu được chia thành. Ví dụ, giá trị k được chỉ định cho thuật toán này được chọn là 3, thuật toán sẽ chia dữ liệu thành 3 cụm.
Mỗi đối tượng sẽ được biểu diễn dưới dạng vector trong không gian. Ban đầu, k điểm sẽ được thuật toán chọn ngẫu nhiên và được coi là trung tâm, mọi đối tượng gần nhất với mỗi trung tâm đều được nhóm lại. Có một số thuật toán cho phép đo khoảng cách và người dùng nên chọn thuật toán bắt buộc.
Creating Vector Files
Không giống như thuật toán Canopy, thuật toán k-mean yêu cầu tệp vectơ làm đầu vào, do đó bạn phải tạo tệp vectơ.
Để tạo tệp vectơ từ định dạng tệp trình tự, Mahout cung cấp seq2parse tiện ích.
Dưới đây là một số tùy chọn của seq2parsetiện ích. Tạo tệp vectơ bằng cách sử dụng các tùy chọn này.
$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.
Sau khi tạo vectơ, tiến hành giải thuật k-mean. Cú pháp để chạy k-mean job như sau:
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>
Công việc phân cụm K-mean yêu cầu thư mục vectơ đầu vào, thư mục cụm đầu ra, số đo khoảng cách, số lần lặp tối đa được thực hiện và một giá trị nguyên đại diện cho số cụm dữ liệu đầu vào sẽ được chia thành.
Phân loại là gì?
Phân loại là một kỹ thuật học máy sử dụng dữ liệu đã biết để xác định cách dữ liệu mới sẽ được phân loại thành một tập hợp các danh mục hiện có. Ví dụ,
Ứng dụng iTunes sử dụng phân loại để chuẩn bị danh sách phát.
Các nhà cung cấp dịch vụ thư như Yahoo! và Gmail sử dụng kỹ thuật này để quyết định xem một thư mới có được phân loại là thư rác hay không. Thuật toán phân loại tự đào tạo bằng cách phân tích thói quen đánh dấu một số thư nhất định của người dùng là thư rác. Dựa vào đó, bộ phân loại quyết định xem một thư trong tương lai sẽ được gửi vào hộp thư đến của bạn hay trong thư mục thư rác.
Cách phân loại hoạt động
Trong khi phân loại một tập dữ liệu nhất định, hệ thống phân loại thực hiện các hành động sau:
- Ban đầu, một mô hình dữ liệu mới được chuẩn bị bằng cách sử dụng bất kỳ thuật toán học nào.
- Sau đó, mô hình dữ liệu đã chuẩn bị được kiểm tra.
- Sau đó, mô hình dữ liệu này được sử dụng để đánh giá dữ liệu mới và xác định lớp của nó.
Ứng dụng của phân loại
Credit card fraud detection- Cơ chế phân loại được sử dụng để dự đoán các gian lận thẻ tín dụng. Sử dụng thông tin lịch sử của các gian lận trước đó, bộ phân loại có thể dự đoán giao dịch nào trong tương lai có thể chuyển thành gian lận.
Spam e-mails - Tùy thuộc vào đặc điểm của các thư rác trước đó, bộ phân loại quyết định xem một thư điện tử mới gặp có nên được gửi vào thư mục thư rác hay không.
Naive Bayes Classifier
Mahout sử dụng thuật toán phân loại Naive Bayes. Nó sử dụng hai cách triển khai:
- Phân loại Naive Bayes phân tán
- Phân loại Naive Bayes bổ sung
Naive Bayes là một kỹ thuật đơn giản để xây dựng bộ phân loại. Nó không phải là một thuật toán duy nhất để đào tạo các bộ phân loại như vậy, mà là một họ các thuật toán. Bộ phân loại Bayes xây dựng các mô hình để phân loại các trường hợp vấn đề. Các phân loại này được thực hiện bằng cách sử dụng dữ liệu có sẵn.
Một lợi thế của Bayes ngây thơ là nó chỉ yêu cầu một lượng nhỏ dữ liệu huấn luyện để ước tính các tham số cần thiết cho việc phân loại.
Đối với một số loại mô hình xác suất, các bộ phân loại Bayes ngây thơ có thể được đào tạo rất hiệu quả trong môi trường học có giám sát.
Bất chấp các giả định đơn giản hóa quá mức, các bộ phân loại Bayes ngây thơ đã hoạt động khá tốt trong nhiều tình huống phức tạp trong thế giới thực.
Thủ tục phân loại
Các bước sau cần được thực hiện để thực hiện Phân loại:
- Tạo dữ liệu mẫu
- Tạo tệp trình tự từ dữ liệu
- Chuyển đổi các tệp trình tự thành vectơ
- Đào tạo các vectơ
- Kiểm tra các vectơ
Bước 1: Tạo dữ liệu mẫu
Tạo hoặc tải xuống dữ liệu được phân loại. Ví dụ, bạn có thể lấy20 newsgroups dữ liệu mẫu từ liên kết sau: http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz
Tạo thư mục để lưu trữ dữ liệu đầu vào. Tải xuống ví dụ như hình bên dưới.
$ mkdir classification_example
$ cd classification_example
$tar xzvf 20news-bydate.tar.gz
wget http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz
Bước 2: Tạo tệp trình tự
Tạo tệp trình tự từ ví dụ bằng cách sử dụng seqdirectorytiện ích. Cú pháp để tạo chuỗi được đưa ra dưới đây:
mahout seqdirectory -i <input file path> -o <output directory>
Bước 3: Chuyển đổi tệp trình tự thành Vectơ
Tạo tệp vectơ từ tệp trình tự bằng cách sử dụng seq2parsetiện ích. Các tùy chọn củaseq2parse tiện ích được đưa ra dưới đây:
$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.
Bước 4: Đào tạo các Vectơ
Đào tạo các vectơ được tạo bằng cách sử dụng trainnbtiện ích. Các tùy chọn để sử dụngtrainnb tiện ích được đưa ra dưới đây:
mahout trainnb
-i ${PATH_TO_TFIDF_VECTORS}
-el
-o ${PATH_TO_MODEL}/model
-li ${PATH_TO_MODEL}/labelindex
-ow
-c
Bước 5: Kiểm tra các Vectơ
Kiểm tra các vectơ bằng cách sử dụng testnbtiện ích. Các tùy chọn để sử dụngtestnb tiện ích được đưa ra dưới đây:
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