Đây là dự án áp dụng kỹ thuật phân cụm tài liệu bằng Python. Đối với bài tập này, chúng tôi đã bắt đầu với nội dung của 24 cuốn sách được lấy từ Google như một phần của Dự án Thư viện Google
Dọn dẹp dữ liệu
Các tệp được đọc bằng hệ thống OCR và chứa các thẻ HTML ở mọi nơi nên bước đầu tiên trước khi bắt đầu phân cụm là làm sạch dữ liệu. Quá trình làm sạch dữ liệu như dưới đây
1- Loại bỏ Thẻ HTML [với Thư viện Python HTMLParser]
2- Bỏ dấu câu
3- Xóa các ký tự không phải tiếng Anh
4- Chữ thường tất cả các từ
5- Bắt nguồn các từ bằng cách sử dụng Porter Stemmer
6- Xóa tất cả các từ dừng
7- Xóa các từ có tần suất xuất hiện cao [Các từ có tỷ lệ xuất hiện trên 75% trong tất cả các sách]
Tính tương đồng của tài liệu
Sau khi làm sạch dữ liệu, bước tiếp theo là tìm ma trận tương tự của tài liệu và các vectơ tài liệu thưa thớt bằng TF-IDF. Dưới đây là biểu diễn của ma trận tương tự
Phân cụm và giảm kích thước
Sau khi có được ma trận tương tự và các vectơ thưa thớt của tài liệu từ TF-IDF, chúng tôi bắt đầu áp dụng các kỹ thuật phân cụm và sử dụng các kỹ thuật giảm kích thước để có thể trực quan hóa nó ở dạng 2D
K-Means và Phân tích thành phần nguyên tắc
Phân cụm theo phương tiện K là một trong những kỹ thuật phân cụm phổ biến, với việc giảm kích thước K = 5 và PCA, nó đã tạo ra đầu ra sau
DBScan và nhân rộng đa chiều
DBScan là một thuật toán phân cụm khác mà chúng tôi có thể sử dụng để phân cụm tài liệu. Với giá trị epsilon 1. 2, nó tạo ra 4 cụm và nếu chúng ta kết hợp nó với MDS, nó sẽ tạo ra đầu ra sau
Phân cụm theo cấp bậc với WARD
Phương pháp của WARD thường được sử dụng để tạo các cụm phân cấp, bên dưới là biểu đồ phân cụm phân cấp được tạo nếu chúng tôi áp dụng nó vào tài liệu của mình
Cho trước các tài liệu văn bản, chúng ta có thể tự động nhóm chúng lại. phân cụm văn bản. Chúng tôi sẽ sử dụng KMeans, một thuật toán học máy không giám sát
Tôi đã sưu tầm một số bài viết về mèo và google. Bạn đã đoán ra. thuật toán sẽ tạo ra các cụm. Các bài viết có thể về bất cứ thứ gì, thuật toán phân cụm sẽ tự động tạo các cụm. Thậm chí mát hơn. sự dự đoán
khóa học liên quan. Hoàn thành khóa học Machine Learning với Python
Kmeans
Chúng tôi tạo tài liệu bằng danh sách Python. Trong ví dụ của chúng tôi, tài liệu chỉ đơn giản là các chuỗi văn bản vừa với màn hình. Trong một tình huống thực tế, chúng có thể là những tệp lớn
documents = ["This little kitty came to play when I was eating at a restaurant.",
"Merley has the best squooshy kitten belly.",
"Google Translate app is incredible.",
"If you open 100 tab in google you get a smiley face.",
"Best cat photo I've ever taken.",
"Climbing ninja cat.",
"Impressed with google map feedback.",
"Key promoter extension for Google Chrome."]
Khai thác tính năng
KMeans thường chỉ hoạt động với các số. chúng ta cần phải có số. Để lấy số, chúng tôi thực hiện một bước phổ biến được gọi là trích xuất tính năng
Tính năng chúng tôi sẽ sử dụng là TF-IDF, một thống kê số. Thống kê này sử dụng tần suất thuật ngữ và tần suất tài liệu nghịch đảo. Nói ngắn gọn. chúng tôi sử dụng số liệu thống kê để có được các tính năng số. Bởi vì tôi lười biếng, Chúng tôi sẽ sử dụng triển khai thuật toán TF-IDF hiện có trong sklearn
Phương thức TfidfVectorizer[] triển khai thuật toán TF-IDF. Tóm lại, phương pháp TfidfVectorizer chuyển đổi một tập hợp các tài liệu thô thành một ma trận các tính năng TF-IDF
phân cụm văn bản
Sau khi có các đặc trưng số, chúng ta khởi tạo thuật toán KMeans với K=2. Muốn xác định K tự động thì xem bài trước. Sau đó, chúng tôi sẽ in các từ hàng đầu cho mỗi cụm
Sau đó, chúng ta đến phần thú vị. chúng tôi cung cấp một tài liệu mới cho thuật toán phân cụm và để nó dự đoán lớp của nó. Trong đoạn mã dưới đây tôi đã làm điều đó hai lần
Mặc dù các khái niệm về tf-idf, tính tương tự của tài liệu và phân cụm tài liệu đã được thảo luận trong các bài viết trước của tôi, nhưng trong bài viết này, chúng tôi thảo luận về việc triển khai các khái niệm trên và tạo một bản demo hoạt động của phân cụm tài liệu trong Python
Tôi đã tạo tập dữ liệu của riêng mình có tên là 'Sách. csv' trong đó tôi đã thêm tên sách Khoa học máy tính liên quan đến các chủ đề như Khoa học dữ liệu, Lập trình Python, Trí tuệ nhân tạo, v.v., cùng với tên tác giả
Cấu trúc dữ liệu như sau
Tác giảTiêu đề sáchTim RoughgardenAlgorithms IlluminatedSteven SkienaHướng dẫn thiết kế khoa học dữ liệuKevin Ferguson, Max PumperlaDeep Learning and the Game of GoZed ShawTìm hiểu Python theo cách khóNhiệm vụ là phân cụm các tên sách bằng tf-idf và K-Means Clustering
Đầu tiên, tôi đã nhập tất cả các thư viện cần thiết
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
import csv
tôi đã nhập khẩu. csv bằng cách chỉ định đường dẫn
data=pd.read_csv["/home/Documents/Books.csv"]
print[data.shape]
print [list[data.columns]]#returns list
data.describe[]
đầu ra
[31, 2]
['Author', 'Title']
Tác giảTiêu đềcount3131unique3129topMax BramerGiới thiệu về Deep Learningfreq12Vì, tôi dự định chỉ áp dụng K-Means Clustering trên tên Sách, nên tôi đã triển khai đoạn mã sau để tạo 2 danh sách riêng cho tác giả và tên sách
authors = []
titles = []
with open["/home/Documents/Books.csv"] as csvfobj: #csvfobj=object
readCSV= csv.reader[csvfobj, delimiter=','] #as each field is separated by ','
#if file is not in the same project, add file path
#Reader object creates matrix
title = []
#to iterate through file row by row
for row in readCSV:
author = row[0]
title = row[1]
#adding to the list
authors.append[author]
titles.append[title]
print [authors]
print[titles]
đầu ra
['Brian Christian, Tom Griffiths', 'Jeff Erickson', 'Martin Erwig', 'Robert Sedgewick', 'Tim Roughgarden', 'Steven Skiena', 'Max Bramer',. ]
['Thuật toán để tồn tại', 'Thuật toán', 'Thuật toán Ngày xửa ngày xưa', 'Thuật toán', 'Làm sáng tỏ thuật toán', 'Sổ tay thiết kế khoa học dữ liệu', 'Nguyên tắc dữ liệu . ]
tf-idf
Bây giờ, các vectơ tf-idf cho tất cả các tiêu đề được tính toán bằng cách sử dụng sklearn. khai thác tính năng. chữ. TfidfVectorizer
- Để hiển thị vectơ tf-idf cho bất kỳ tiêu đề nào, cần phải đặt nó trong DataFrame trình bày đầu ra ở dạng bảng
tfidfvect = TfidfVectorizer[stop_words='english']
X = tfidfvect.fit_transform[titles]
first_vector = X[0]
dataframe = pd.DataFrame[first_vector.T.todense[], index = vectorizer.get_feature_names[], columns = ["tfidf"]]
dataframe.sort_values[by = ["tfidf"],ascending=False]
đầu ra
tfidflive0. 796514thuật toán0. 604621phần mềm0. 000000. lịch sử0. 000000Phân cụm K-Means
Cuối cùng, mô hình K-Means Clustering được xây dựng bằng sklearn. cụm. KMeans
num = 5
kmeans = KMeans[n_clusters = num, init = 'k-means++', max_iter = 500, n_init = 1]
kmeans.fit[X]
print[kmeans.cluster_centers_] #This will print cluster centroids as tf-idf vectors
đầu ra
[[0. 034752240. 076923080. 246864710. 034752240. 0. 150460020. 0. 055813890. 034752240. 035805370. 0. 0. 0. 0. 0. 064922190. 0. 0. 064922190. 0. 0. 0. 0. 040003350. 034752240. 0. 0. 034752240. 088483660. 034752240. 061270280. 0. 150460020. 0. 034752240. 0. 0. 061270280. 0. 035805370. 0. 0. 0. 0. 0. 0. 128026330. 034752240. 035805370. 0. 0. 0. 0. 0. 0. 0. 040003350. ][. ]]Để dự đoán cụm cho tên sách mới
X = tfidfvect.transform[["Data Structures and Algorithms"]]
predicted = kmeans.predict[X]
print[predicted]
đầu ra
________số 8Điều này sẽ cho kết quả ở dạng [n] trong đó n sẽ chỉ ra số cụm mà cuốn sách "Cấu trúc dữ liệu và thuật toán" sẽ thuộc về