Helpex - Trao đổi & giúp đỡ Đăng nhập

Mọi thứ bạn cần biết về thư viện Scikit-Learn Python

Nếu bạn mới đặt bước đầu tiên trong ngành khoa học dữ liệu và đang học ngôn ngữ lập trình Python, là một người theo học Pythonist, bạn nên lưu ý đến thư viện Scikit-learning. Nếu bạn đang nghiêm túc xem xét việc đưa khoa học dữ liệu và máy học vào một hệ thống hiệu quả, thì bạn nên sử dụng toàn diện thư viện Scikit-learning Python. Trong bài viết này, hãy cùng chúng tôi khám phá thư viện Scikit-Learn Python và tìm hiểu các khía cạnh khác nhau của việc sử dụng nó.

Bối cảnh của Scikit-learning

Scikit-learning còn được biết đến với các từ đồng nghĩa như scikits.learn (đã biết trước đây) hoặc sklearn. Nó là một thư viện học máy mã nguồn mở miễn phí được sử dụng cho ngôn ngữ lập trình Python. Thư viện được phát triển bởi David Cournapeau như một dự án Google Summer Code vào năm 2007. Dự án sau đó được Matthieu Brucher tham gia vào năm 2010. Thư viện lần đầu tiên ra mắt công chúng vào tháng 2 năm 2010 và chỉ trong hai năm, tức là vào tháng 11 năm 2012, thư viện đã trở thành một trong những thư viện phổ biến nhất về học máy trên Github. Các tính năng chính của thư viện Scikit-learning bao gồm thuật toán phân loại, hồi quy và phân cụm (hỗ trợ máy vectơ, rừng ngẫu nhiên, tăng độ dốc, k-means và DBSCAN). Sklearn được thiết kế để xử lý các thư viện số và khoa học của Python như NumPy và SciPy.

Triển khai Scikit-learning

Sklearn được sử dụng chủ yếu trong ngôn ngữ lập trình Python và NumPy được sử dụng để mở rộng hiệu suất cao trong các phép toán và đại số tuyến tính. Một số thuật toán cốt lõi được viết trong Cython cũng sử dụng thư viện này để ứng biến hiệu suất.

Tích hợp Scikit-learning

Trong ngôn ngữ lập trình Python, thư viện Scikit-learning có thể được tích hợp với các thư viện Python khác để thực hiện các tác vụ khác nhau:

  • NumPy  - (Biểu đồ hóa mảng) Gói mảng n chiều cơ sở
  • SciPy - Thư viện cơ bản cho máy tính khoa học
  • Matplotlib và Plotly - (Lập âm mưu) Vẽ toàn diện 2D / 3D
  • IPython - Bảng điều khiển tương tác nâng cao
  • Sympy - Toán học biểu tượng
  • Gấu trúc - Cấu trúc và phân tích dữ liệu
  • SciPy - Tính toán khoa học

Các phần mở rộng được SciKits chăm sóc cẩn thận, nhưng vì mô-đun bao gồm các thuật toán học, do đó nó được đặt tên là Scikit-learning.

Điểm nổi bật của Scikit-learning

  • Phân cụm được sử dụng để nhóm dữ liệu không được gắn nhãn, ví dụ: KMeans.

  • Xác thực chéo được sử dụng để ước tính hiệu suất của các mô hình được giám sát trên dữ liệu không nhìn thấy.

  • Tập dữ liệu được sử dụng cho các tập dữ liệu thử nghiệm và để tạo ra các tập dữ liệu với các thuộc tính cụ thể để điều tra hành vi của mô hình.

  • Giảm kích thước được sử dụng để giảm số lượng thuộc tính trong dữ liệu để tóm tắt, trực quan hóa và lựa chọn tính năng, chẳng hạn như phân tích thành phần chính.

  • Các phương pháp gộp được sử dụng để kết hợp các dự đoán của nhiều mô hình được giám sát.

  • Trích xuất tính năng được sử dụng để xác định các thuộc tính trong dữ liệu hình ảnh và văn bản.

  • Lựa chọn tính năng được sử dụng để xác định các thuộc tính có ý nghĩa mà từ đó các mô hình được giám sát được tạo ra.

  • Điều chỉnh tham số được sử dụng để khai thác tối đa các mô hình được giám sát.

  • Manifold Learning được sử dụng để tóm tắt và mô tả dữ liệu đa chiều phức tạp.

  • Mô hình được giám sát là một mảng rộng lớn không giới hạn ở các mô hình tuyến tính tổng quát, phân tích phân biệt, Bayes ngây thơ, phương pháp lười biếng, mạng nơ-ron, máy vectơ hỗ trợ và cây quyết định.

Người dùng Thư viện Scikit-learning Python là ai?

Scikit-learning được sử dụng bởi những gã khổng lồ công nghệ như Inria, Mendeley, Wisdom.io, Evernote, Telecom Paris Tech và AWeber. Ngoài những thứ này, có hàng chục đến hàng trăm công ty lớn sử dụng thư viện này.

Tài liệu về thư viện Scikit-learning Python

Ví dụ: Phân tích cảm xúc với Scikit-learning

Phân loại văn bản được thực hiện với sự trợ giúp của NLP và nó có một loạt các ứng dụng như phát hiện tình cảm của người dùng, phân loại email là spam hoặc ham, phân loại các bài đăng trên blog thành gắn thẻ tự động, danh mục, v.v. Làm theo 8 bước dưới đây để tạo mô hình phân loại văn bản trong Python:

Nhập thư viện

Đầu tiên, hãy thực thi đoạn mã sau để nhập các thư viện cần thiết để thực thi.

import NumPy as np

import re

import nltk

from sklearn.datasets import load-files

nltk.download('stopwords')

import pickle

from nltk.corpus import stopwords


Nhập tập dữ liệu

Để nhập tập dữ liệu vào ứng dụng của chúng tôi, chúng tôi sẽ sử dụng hàm load_files từ thư viện sklearn_datasets. Chức năng này sẽ tự động phân chia tập dữ liệu thành một tập hợp mục tiêu. Trong ví dụ của chúng tôi, chúng tôi sẽ chuyển đường dẫn load_files đến thư mục “txt_sentoken”. Load_files sẽ coi mỗi thư mục bên trong thư mục “txt_sentoken” là một danh mục và tất cả các tài liệu bên trong thư mục sẽ được chỉ định là danh mục tương ứng. Hãy thực hiện đoạn mã sau:

movie_data = load_files(r"E:\txt_sentoken")

x,y = movie_data.data, movie_data.target


Các load_files được sử dụng trong đoạn mã trên sẽ tải dữ liệu từ cả hai thư mục 'neg' và 'pos' vào biến X và lưu trữ nó trong danh mục đích là y. Trong đoạn mã trên, x là danh sách 1000 phần tử kiểu chuỗi, trong khi y là một mảng numpy với kích thước 1000. Nếu bạn muốn in y ra màn hình thì bạn sẽ nhận được kết quả là 1s và 0s. Lý do đằng sau là hàm load_files thêm một số vào mảng numpy đích. Đối với danh mục 'neg' và 'pos', 1s và 0s đã được thêm vào mảng mục tiêu.

Tiền xử lý văn bản

Sau khi bạn đã nhập tập dữ liệu, đã đến lúc xử lý trước văn bản. Văn bản có thể là sự kết hợp của số, ký tự đặc biệt, dấu cách trống,… Căn cứ vào yêu cầu, chúng ta có thể thêm, bớt hoặc chỉnh sửa văn bản. Trong đoạn mã dưới đây, chúng tôi sẽ xóa các khoảng trống khỏi văn bản được đề cập. Chúng tôi sẽ sử dụng Biểu thức Regex từ thư viện Python lại.

documents = []

 

from nltk.stem import WordNetLemmatizer

 

stemmer = WordNetLemmatizer()

 

for sen in range(0, len(X)):

    # Remove all the special characters

    document = re.sub(r'\W', ' ', str(X[sen]))

    

    # remove all single characters

    document = re.sub(r'\s+[a-zA-Z]\s+', ' ', document)

    

    # Remove single characters from the start

    document = re.sub(r'\^[a-zA-Z]\s+', ' ', document) 

    

    # Substituting multiple spaces with single space

    document = re.sub(r'\s+', ' ', document, flags=re.I)

    

    # Removing prefixed 'b'

    document = re.sub(r'^b\s+', '', document)

    

    # Converting to Lowercase

    document = document.lower()

    

    # Lemmatization

    document = document.split()

 

    document = [stemmer.lemmatize(word) for word in document]

    document = ' '.join(document)

    

    documents.append(document)


Bước tiền xử lý được gọi là lemmatization được sử dụng để giảm từ thành dạng gốc của từ điển. Ví dụ, chuột có thể được chuyển đổi thành một con chuột. Bổ sung hóa được sử dụng để tránh các tính năng được tạo ngữ nghĩa khác nhau về mặt cú pháp.

Chuyển đổi văn bản thành số

Máy móc không hiểu văn bản thô như con người và chúng chỉ hiểu các số ở dạng nhị phân (0 và 1). Khi chúng ta đang xử lý các khái niệm máy học, chúng ta cần chuyển đổi văn bản thành số để máy móc có thể hiểu được những gì được viết. Ở đây, có thể sử dụng hai cách tiếp cận - “mô hình túi từ” và “mô hình nhúng từ”.

Chúng ta hãy sử dụng cách tiếp cận từ TFIDF TF là Tần suất kỳ hạn và IDF là Tần suất tài liệu nghịch đảo.

Tính toán Tần suất kỳ hạn (TF) được thực hiện bởi:

Term frequency = (Number of Occurrences of a word)/(Total words in the document

Tính toán tần suất tài liệu nghịch đảo (IDF) được thực hiện bởi

IDF(word) = Log((Total number of documents)/(Number of documents containing the word)) 


Điều này nói rằng giá trị TFIDF cho một tài liệu cụ thể cao hơn nếu sự xuất hiện của từ cao hơn tài liệu cụ thể nhưng thấp hơn trong phần còn lại của tài liệu.

Đoạn mã sau đây sẽ giúp chuyển đổi các giá trị thu được bằng cách sử dụng mô hình bag of words thành TFIDF.

từ sklearn.feature_extraction.text nhập TfidfTransformer

tfidfconverter = TfidfTransformer()

X = tfidfconverter.fit_transform(X).toarray()


Hoặc trong trường hợp bạn muốn trực tiếp chuyển đổi tài liệu văn bản thành các giá trị tính năng TFIDF, hãy sử dụng đoạn mã sau:

từ sklearn. feature_extraction.text import TfidfVectorizer

tfidfconverter = TfidfVectorizer(max_features=1500, min_df=5, max_df=0.7, stop_words=stopwords.words('english'))

X = tfidfconverter.fit_transform(documents).toarray()


Bộ đào tạo và kiểm tra

Trong trường hợp có bất kỳ sự cố học máy có giám sát nào, cần phải hiểu về các bộ kiểm tra và đào tạo. Sử dụng tiện ích train_test_split từ thư viện sklearn.model_selection. Đoạn mã dưới đây sẽ chia dữ liệu thành 20% tập hợp thử nghiệm và 80% tập hợp đào tạo.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)


Mô hình phân loại văn bản đào tạo và dự đoán cảm xúc

Sau khi phân chia dữ liệu thành các tập huấn luyện và huấn luyện, hãy sử dụng Thuật toán rừng ngẫu nhiên để thực hiện bước tiếp theo. Bạn cũng có thể sử dụng bất kỳ thuật toán nào mà bạn chọn. Trong đoạn mã dưới đây, chúng tôi sẽ triển khai Thuật toán Rừng Ngẫu nhiên.

classifier = RandomForestClassifier(n_estimators=1000, random_state=0)

classifier.fit(X_train, y_train) 


Vì vậy, bây giờ bạn đã đào tạo mô hình phân loại văn bản của mình với một số dự đoán.

Đánh giá mô hình

Việc đánh giá một mô hình phân loại sẽ được thực hiện bằng cách sử dụng các thước đo. Chúng tôi sẽ sử dụng các tiện ích phân loại_report, nhầm lẫn_matrix và precision_score từ thư viện sklearn.metrics.

từ sklearn.metrics nhập phân loại_ báo cáo, nhầm lẫn_matrix, độ chính xác_score

 print(confusion_matrix(y_test,y_pred))

print(classification_report(y_test,y_pred))

print(accuracy_score(y_test, y_pred))


Lưu và tải mô hình

Đoạn mã trên chỉ là một đoạn mã nhỏ hơn của ví dụ mà chúng tôi đã lấy. Trong các kịch bản thời gian thực, có thể có một số lượng lớn tài liệu. Do đó, bạn nên lưu mô hình sau khi nó được đào tạo vì bạn đã thực hiện nhiều ngày hoặc nhiều tháng trong việc triển khai các thuật toán đó.

Mẹo hoàn thiện mô hình của bạn 

Đảm bảo những cân nhắc quan trọng khi hoàn thiện mô hình học máy của bạn bằng cách sử dụng thư viện scikit-learning. Điều này bao gồm- Phiên bản Python, các phiên bản thư viện và tuần tự hóa thủ công.

Bạn có bất kỳ câu hỏi nào liên quan đến Python hoặc khoa học dữ liệu hoặc học máy không? Chia sẻ thắc mắc của bạn trong phần bình luận bên dưới, tôi rất muốn giải quyết thắc mắc của bạn. Tôi hy vọng bạn đã rõ chủ đề bây giờ và tôi sẽ sớm đưa ra một vài blog khác về python. Cho đến lúc đó, bạn có thể tìm thấy một bài đăng trên blog python tại codegnan.

16 hữu ích 0 bình luận 23k xem chia sẻ

Có thể bạn quan tâm

loading