無監(jiān)督學(xué)習(xí)是一種用于在數(shù)據(jù)中查找模式的機(jī)器學(xué)習(xí)技術(shù)。無監(jiān)督算法給出的數(shù)據(jù)不帶標(biāo)記,只給出輸入變量(X),沒有相應(yīng)的輸出變量。在無監(jiān)督學(xué)習(xí)中,算法自己去發(fā)現(xiàn)數(shù)據(jù)中有趣的結(jié)構(gòu)。
人工智能研究總監(jiān)嚴(yán)樂群解釋說,非監(jiān)督學(xué)習(xí)教學(xué)機(jī)器能夠自主學(xué)習(xí),而不需要被明確告知它們所做的一切是對是錯,這是實現(xiàn)真正人工智能的關(guān)鍵。
監(jiān)督與無監(jiān)督學(xué)習(xí)
在監(jiān)督學(xué)習(xí)中,系統(tǒng)試圖從前面給出的例子中學(xué)習(xí)。(另一方面,在無監(jiān)督學(xué)習(xí)中,系統(tǒng)試圖直接從給出的例子中找到模式。)如果數(shù)據(jù)集被標(biāo)記,它就會遇到監(jiān)督問題,如果數(shù)據(jù)集沒有標(biāo)記,那么它就是一個監(jiān)督問題。
SRC
左邊的圖像是監(jiān)督學(xué)習(xí)的一個例子;我們使用回歸技術(shù)來尋找特征之間的最佳匹配線。而在無監(jiān)督學(xué)習(xí)中,輸入是基于特征分離的,預(yù)測是基于它所屬的集群。
重要術(shù)語
特性:用于預(yù)測的輸入變量。
預(yù)測:當(dāng)提供一個輸入示例時,模型s的輸出。
示例:數(shù)據(jù)集的一行。示例包含一個或多個特性,可能還有一個標(biāo)簽。
標(biāo)簽:特性的結(jié)果。
為無監(jiān)督學(xué)習(xí)準(zhǔn)備數(shù)據(jù)
在本文中,我們使用Iris數(shù)據(jù)集進(jìn)行第一次預(yù)測。該數(shù)據(jù)集包含一組150條記錄,包含5個屬性:花瓣長度、花瓣寬度、萼片長度、萼片寬度和類別。蝴蝶花,蝴蝶花和花色蝴蝶花是三個等級。對于我們的無監(jiān)督算法,我們給出虹膜花的這四個特征,并預(yù)測它屬于哪一類。
我們使用Python中的sklearn庫加載Iris數(shù)據(jù)集,使用matplotlib實現(xiàn)數(shù)據(jù)可視化。下面是用于研究數(shù)據(jù)集的代碼片段。
# 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(厘米)']
[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 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']
紫羅蘭:瀨戶草,綠色:雜色,黃色:弗吉尼亞
在上面的圖像中,左邊的圖像是未分類的原始數(shù)據(jù),右邊的圖像是聚類的(根據(jù)數(shù)據(jù)的特征進(jìn)行分類)。當(dāng)給定一個要預(yù)測的輸入時,它會根據(jù)它的特性檢查它所屬的集群,然后進(jìn)行預(yù)測。
Python中的K-Means聚類
K均值是一種迭代聚類算法,其目標(biāo)是在每次迭代中尋找局部最大值。選擇初始所需的集群數(shù)量。因為我們知道有3個類,所以我們編寫算法將數(shù)據(jù)分組到3個類中,方法是將參數(shù)n個集群傳遞到KMeans模型中?,F(xiàn)在隨機(jī)將三個點(diǎn)(輸入)分配到三個集群中。根據(jù)每個點(diǎn)之間的質(zhì)心距離,下一個給定的輸入被分離成受尊重的集群?,F(xiàn)在,重新計算所有集群的質(zhì)心。
集群的每個質(zhì)心是定義結(jié)果組的特征值的集合。質(zhì)心特征權(quán)值的檢驗可以定性地解釋每個聚類所代表的組的類型。
從sklearn庫中導(dǎo)入KMeans模型,進(jìn)行特征擬合和預(yù)測。
K是Python中的實現(xiàn)。
# 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 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 1 2 1 1 1 1 2 1 1 1 1 1 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2]
分層聚類
分層聚類,顧名思義,是一種構(gòu)建集群層次結(jié)構(gòu)的算法。該算法首先將所有數(shù)據(jù)分配給自己的集群。然后將兩個最近的集群連接到同一個集群中。最后,當(dāng)只剩下一個集群時,該算法就結(jié)束了。
利用樹狀圖可以顯示層次聚類的完成情況?,F(xiàn)在讓我們看一個谷物數(shù)據(jù)分層聚類的例子。數(shù)據(jù)集可以在這里找到。
Python中的分層集群實現(xiàn)。
# 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均值和分層聚類之間的差異
層次聚類不能很好地處理大數(shù)據(jù),K表示聚類可以。這是因為K均值的時間復(fù)雜度是線性的,即O(n),而層次聚類的時間復(fù)雜度是二次的,即O(n2)。
在K均值聚類中,當(dāng)我們從任意選擇的聚類開始時,多次運(yùn)行該算法生成的結(jié)果可能會有所不同。而結(jié)果在層次聚類中是可重復(fù)的。
當(dāng)星系團(tuán)的形狀是超球形(如二維的圓形,三維的球形)時,發(fā)現(xiàn)K 代表工作良好。
K-Means不允許有噪聲的數(shù)據(jù),而在分層中我們可以直接使用有噪聲的數(shù)據(jù)集進(jìn)行聚類。
t-SNE聚類
它是一種無監(jiān)督的可視化學(xué)習(xí)方法。t-SNE代表t分布隨機(jī)鄰居嵌入。它將高維空間映射到可以可視化的二維或三維空間。具體地說,它通過一個二維或三維點(diǎn)對每個高維物體進(jìn)行建模,其方法是用附近的點(diǎn)對相似的物體建模,用高概率的遠(yuǎn)點(diǎn)對不同的物體建模。
Python中Iris數(shù)據(jù)集的t-SNE聚類實現(xiàn)。
# 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
這里,由于Iris數(shù)據(jù)集具有四個特征(4d),將其轉(zhuǎn)換成二維圖表示。類似地,t-SNE模型可以應(yīng)用于具有n個特征的數(shù)據(jù)集。
DBSCAN群集
DBSCAN(基于密度的噪聲應(yīng)用空間聚類)是一種常用的聚類算法,用于替代預(yù)測分析中的k均值。它不需要您輸入集群的數(shù)量才能運(yùn)行。但作為交換,您必須調(diào)優(yōu)其他兩個參數(shù)。
scikit-learn實現(xiàn)為eps和min示例參數(shù)提供了默認(rèn)值,但是通常需要對它們進(jìn)行調(diào)優(yōu)。eps參數(shù)是在同一個鄰域內(nèi)需要考慮的兩個數(shù)據(jù)點(diǎn)之間的最大距離。最小樣本參數(shù)是一個鄰域內(nèi)被認(rèn)為是一個集群的數(shù)據(jù)點(diǎn)的最小數(shù)量。
-
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8488瀏覽量
134010 -
python
+關(guān)注
關(guān)注
56文章
4823瀏覽量
86109
原文標(biāo)題:使用Python進(jìn)行無監(jiān)督學(xué)習(xí)
文章出處:【微信號:gh_ecbcc3b6eabf,微信公眾號:人工智能和機(jī)器人研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
使用MATLAB進(jìn)行無監(jiān)督學(xué)習(xí)

使用Python進(jìn)行串口通信的案例
時空引導(dǎo)下的時間序列自監(jiān)督學(xué)習(xí)框架

如何幫助孩子高效學(xué)習(xí)Python:開源硬件實踐是最優(yōu)選擇
使用Python進(jìn)行Ping測試

評論