یادگیری نظارت نشده در پایتون چیست
یادگیری نظارت نشده چیست
در یادگیری نظارت شده یک ماشین با دادههای برچسبدار آموزش می بیند. به این معنی که تمامی دادهها از قبل با برچسب درست علامتگذاری شده اند. این حالت را می توان به یادگیری یک دانش آموز در حضور معلم تشبیه کرد. یادگیری ماشین را می توان به طور کلی در دو دسته یادگیری نظارت شده و یادگیری نظارت نشده در پایتون تقسیم بندی کرد.
مزایای یادگیری نظارت شده در پایتون
با استفاده از یادگیری نظارت شده میتوان بر اساس دادههای گذشته، دادههای جدیدی جمع آوری یا ایجاد کرد. میتوان معیار کارایی را بر اساس تجربیات بهینه کرد. یادگیری نظارت شده این امکان را فراهم میآورد تا مشکلات محاسباتی مختلف در محیطهای واقعی را حل کنید.
منظور از یادگیری نظارت نشده در پایتون
یادگیری نظارت نشده یک روش یادگیری ماشین است که در آن هیچ نظارتی بر روی مدل صورت نمی گیرد. به عبارت دیگر به مدل اجازه داده می شود که خود دادهها را تحلیل کرده و اطلاعات را دسته بندی کند. این روش با دادههای بدون بر چسب انجام می گیرد. یادگیری نظارت شده توانایی انجام فعالیت پیچیدهتری نسبت به یادگیری نظارت شده را دارد. اما نتایج آن چندان قابل پیش بینی نیست.
ویدیو پییشنهادی : آموزش پایتون مکتب خونه
مزایای یادگیری نظارت نشده در پایتون
- با استفاده از یادگیری نظارت نشده می توان تمامی الگوهای ناشناخته موجود در داده را کشف کرد.
- برای یافتن خصوصیاتی که می توان از آن در دسته بندی دادهها استفاده کرد، یادگیری نظارت نشده بسیار مفید است.
- تمامی فرایندها در یک محیط بلادرنگ صورت میگیرد، بنابراین تمامی دادهها در حضور یادگیرنده ها به مدل وارد شده و برچسب گذاری می شوند.
- دریافت دادههای بدون برچسب بسیار راحت است چرا که اغلب دادهها توسط کامپیوتر ایجاد میشوند اما برای داده های برچسب دار باید نیروی انسانی به کار گرفته شود.
نحوهی کار یادگیری نظارت نشده
برای توضیح نحوه یادگیری نظارت نشده از یک مثال کمک میگیریم، یک نوزاد و سگ خانگی را در نظر بگیرید. این کودک سگ خانگی خود را میشناسد و به راحتی با او بازی میکند. حال یکی از آشنایان سگ دیگری را با خود به خانه نوزاد آورده و سگ او قصد دارد با آن نوزاد بازی کند.
این نوزاد سگ را نمی شناسد، اما می تواند خصوصیات آشنایی در او ببینید (مثل گوش ها، ایستادن روی 4 پا و غیره) که به سگ خود شباهت دارد. در نتیجه نوزاد این حیوان را به عنوان یک سگ شناسایی خواهد کرد.
به این روش یادگیری نظارت نشده گفته می شود که در آن چیزی یاد داده نمی شود، بلکه با توجه به اطلاعات قبلی از دادهها نتیجهگیری میشود.
مقاله پییشنهادی : داده کاوی با پایتون چیست
آماده سازی داده ها برای یادگیری نظارت نشده با پایتون
برای درک آسان موضوع و تخمین داده ها، از دیتا ست Iris استفاده می کنیم. در این دیتا ست 150 رکورد وجود دارد که دارای 4 خصوصیت می باشند. این خصوصیات عبارتند از طول گلبرگ، عرض گلبرگ، طول کاسبرگ، عرض کاسبرگ. دیتا ست Iris دارای 3 کلاس Setosa، Virginica و Versicolor می باشد. در این مثال هر 4 خصوصیت گل خود را به الگوریتم یادگیری نظارت نشده معرفی خواهیم کرد و این مدل تشخیص می دهد که هر Iris به کدام کلاس تعلق دارد.
در این مثال از کتابخانه scikit-learn پایتون برای بارگذاری دادههای Iris و از matplotlib برای مصور کردن دادهها استفاده شده است.
کد زیر جهت کاوش دیتاست و آمادهسازی دادهها می باشد:
# Importing Modules
from sklearn import datasets
import matplotlib.pyplot as plt
# Loading dataset
iris_df = datasets.load_iris()
# Available methods on dataset
print(dir(iris_df))
# Features
print(iris_df.feature_names)
# Targets
print(iris_df.target)
# Target Names
print(iris_df.target_names)
label = {0: 'red', 1: 'blue', 2: 'green'}
# Dataset Slicing
x_axis = iris_df.data[:, 0] # Sepal Length
y_axis = iris_df.data[:, 2] # Sepal Width
# Plotting
plt.scatter(x_axis, y_axis, c=iris_df.target)
plt.show()
['DESCR', 'data', 'feature_names', 'target', 'target_names']
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
['setosa' 'versicolor' 'virginica']
- بنفس: SETOSA
- سبز: VERSICOLOR
- زرد: VIRGINICA
انواع خوشه بندی ها
در خوشه بندی داده ها، ورودیها در گروه هایمختلفی که خصوصیات یکسانی دارند، دسته بندی می شوند.
- سمت راست: تصویر داده های خوشه بندی شده
- سمت چپ: تصویر دادههای اصلی
در تصاویر بالا، تصویر سمت چپ مربوط به دادههای خام بدون خوشهبندی میباشد و تصویر سمت راست داده های خوشه بندی شده بر اساس خصوصیات آنها می باشد. زمانی که یک ورودی به مدل داده میشود تا آن را تخمین بزند، با توجه خصوصیات آن خوشه متناسب را برایش پیدا میکند. به این کار تخمین زدن یا خوشه بندی داده ها گفته میشود.
خوشه بندی K-means در پایتون
خوشه بندی K-means یک الگورتیم خوشهبندی تکراری است که هدف آن یافتن بیشینه محلی در هر تکرار است. در آغاز تعداد خوشههای مناسب انتخاب میشود. در مثال ما 3 کلاس وجود دارد از این رو، الگوریتم را طوری طراحی می کنیم که دادهها را در سه گروه قرار دهد. برای این کار باید از دستور n_clusters استفاده کنیم.
سه نقطه را به صورت تصادفی در سه خوشه قرار میدهیم. بر اساس فاصله مرکزوار هندسی نقاط از هم، ورودیهای بعدی در خوشه های متناظر خود دستهبندی شده و هر بار فاصله مرکزوار هندسی دوباره برای تمامی خوشه ها محاسبه میشود.
ویدیو پییشنهادی : آموزش پایتون جادی
Centroid هندسی هر کدام از خوشهها مجموعه ای از خصوصیاتی است که گروه حاصل را مشخص می کند. با بررسی وزن مرکزوار هندسی می توان به این نکته پی برد که هر خوشه چه خصوصیاتی دارد.
در این مثال با استفاده از کتابخانه scikit-learn، مدل خوشه بندی K-means را به برنامه وارد کرده و خصوصیات آن را شناسانده و عمل تخمین را انجام می دهیم.
پیاده سازی خوشه بندی K-means در پایتون
# Importing Modules
from sklearn import datasets
from sklearn.cluster import KMeans
# Loading dataset
iris_df = datasets.load_iris()
# Declaring Model
model = KMeans(n_clusters=3)
# Fitting Model
model.fit(iris_df.data)
# Predicitng a single input
predicted_label = model.predict([[7.2, 3.5, 0.8, 1.6]])
# Prediction on the entire data
all_predictions = model.predict(iris_df.data)
# Printing Predictions
print(predicted_label)
print(all_predictions)
[0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2]
خوشه بندی سلسله مراتبی در پایتون
همانگونه که از نام آن مشخص، خوشه بندی سلسله مراتبی الگوریتمی است که خوشه ها را به صورت سلسله مراتبی دستهبندی می کند. این الگوریتم با داده های اختصاص داده شده به یک خوشه آغاز میشود.
در مرحله بعد دو خوشه که در نزدیکترین فاصله به یکدیگر قرار دارند، با هم ادغام می شوند. این الگوریتم زمانی به پایان میرسد که فقط یک خوشه باقیمانده باشد.
نتیجه خوشه بندی سلسله مراتبی را می توان با استفاده از دندروگرام نمایش داد. برای مثال از دیتاست Grain استفاده کرده ایم.
پیاده سازی خوشه بندی سلسله مراتبی
# Importing Modules
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt
import pandas as pd
# Reading the DataFrame
seeds_df = pd.read_csv(
"https://raw.githubusercontent.com/vihar/unsupervised-learning-with-python/master/seeds-less-rows.csv")
# Remove the grain species from the DataFrame, save for later
varieties = list(seeds_df.pop('grain_variety'))
# Extract the measurements as a NumPy array
samples = seeds_df.values
"""
Perform hierarchical clustering on samples using the
linkage() function with the method='complete' keyword argument.
Assign the result to mergings.
"""
mergings = linkage(samples, method='complete')
"""
Plot a dendrogram using the dendrogram() function on mergings,
specifying the keyword arguments labels=varieties, leaf_rotation=90,
and leaf_font_size=6.
"""
dendrogram(mergings,
labels=varieties,
leaf_rotation=90,
leaf_font_size=6,
)
plt.show()
تفاوت خوشه بندی ها، خوشه بندی سلسله مراتبی و خوشه بندی K-means
خوشه بندی سلسله مراتبی برای دادههای بزرگ چندان مناسب نیست اما خوشه بندی K-means دادههای بزرگ را به راحتی تخمین می زند. علت این امر پیچیدگی زمانی خطی (O(n در خوشه بندی K-means می باشد در حالی که پیچیدگی زمانی خوشه بندی سلسله مراتبی به صورت نمایی (O(n2 است.
خوشه بندی K-means، خوشهبندیها را به صورت تصادفی انجام می دهد. اگر الگوریتم چندین بار اجرا شود، نتایج متفاوتی به دست خواهد آمد. اما در خوشهبندی سلسله مراتبی نتیجه یکسان خواهد بود.
نتایج نشان داده که خوشه بندی K-means زمانی که خوشه ها به شکل کره چند بعدی (مثل دایره در دو بعدی یا کره در سه بعدی) است بهتر عمل میکند.
ویدیو پییشنهادی : یادگیری ماشین
انواع خوشه بندی داده ها
در خوشه بندی K-means نمی توان از داده های نویزی استفاده کرد اما در خوشه بندی سلسله مراتبی داده های نویزی را می توان مستقیما استفاده کرد.
خوشه بندی T-SNE
یکی از روشهای یادگیری نظارت نشده مصور، الگوریتم خوشه بندی T-SNE می باشد. این الگوریتم می تواند فضای چند بعدی را به فضای دو یا سه بعدی تبدیل کرده و آن را مصور کند. در این مدل قرارگیری اشیای چند بعدی به صورت دو یا سه بعدی در کنار هم به این صورت است که نقاط مشابه در کنار هم قرار گرفته و نقاط متفاوت دورتر قرار می گیرند.
پیاده سازی خوشه بندی T-SNE
# Importing Modules
from sklearn import datasets
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
# Loading dataset
iris_df = datasets.load_iris()
# Defining Model
model = TSNE(learning_rate=100)
# Fitting Model
transformed = model.fit_transform(iris_df.data)
# Plotting 2d t-Sne
x_axis = transformed[:, 0]
y_axis = transformed[:, 1]
plt.scatter(x_axis, y_axis, c=iris_df.target)
plt.show()
- بنفس: SETOSA
- سبز: VERSICOLOR
- زرد: VIRGINICA
خوشه بندی DBSCAN
خوشهبندی مکانی بر اساس تراکم فاصلهای با به کارگیری داده های نویزی که به اختصار به آن خوشه بندی DBSCAN گفته می شود، یکی از محبوبترین روش هایی است که به عنوان جایگزین روش خوشه بندی K-means مورد استفاده قرار میگیرد. برای کار با این الگوریتم نیازی به مشخص کردن تعداد خوشههای مورد نیاز نداریم اما باید دو پارامتر دیگر را تعیین کنیم.
مقاله پییشنهادی : آموزش یادگیری ماشین لرنینگ با پایتون
با اینکه پیادهسازی این مدل با استفاده از کتابخانه scikit-learn مقادیر پارامترهای eps و min_samples را به صورت پیش فرض تعیین میکند، اما به معمولا باید این پارامتر ها را نیز تنظیم کنید. پاراکتر eps نشان دهنده بیشترین فاصله بین دو نقطه در یک خوشه است. پارامتر min_samples کمترین تعداد در یک همسایگی است که میتوان آن را یک خوشه محسوب کرد.
پیاده سازی خوشه بندی DBSCAN
# Importing Modules
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.decomposition import PCA
# Load Dataset
iris = load_iris()
# Declaring Model
dbscan = DBSCAN()
# Fitting
dbscan.fit(iris.data)
# Transoring Using PCA
pca = PCA(n_components=2).fit(iris.data)
pca_2d = pca.transform(iris.data)
# Plot based on Class
for i in range(0, pca_2d.shape[0]):
if dbscan.labels_[i] == 0:
c1 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='r', marker='+')
elif dbscan.labels_[i] == 1:
c2 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='g', marker='o')
elif dbscan.labels_[i] == -1:
c3 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='b', marker='*')
plt.legend([c1, c2, c3], ['Cluster 1', 'Cluster 2', 'Noise'])
plt.title('DBSCAN finds 2 clusters and Noise')
plt.show()
از روشهای دیگر یادگیری نظارت نشده در پایتون می توان به موارد زیر نیز اشاره کرد:
- PCA یا تحلیل مؤلفه های اصلی
- تشخیص ناهنجاری
- خودرمزگذار
- شبکه عصبی عمیق
- یادگیری به روش تئوری هب
- شبکه های عصبی مولد متضاد یا GAN
- نقشههای خودسازماندهنده