1. 程式人生 > 實用技巧 >機器學習的非監督學習總結

機器學習的非監督學習總結

#分解:可以學習Sklearn的使用者指南中獨立成分分析、因子分析、稀疏編碼等   https://scikit-learn.org/stable/modules/decomposition.html#decompositions

import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.decomposition import NMF
from sklearn.manifold import TSNE
from sklearn.cluster import KMeans

#載入資料
cancer=load_breast_cancer()
X_train,X_test,y_train,y_test=train_test_split(cancer.data,cancer.target,random_state=0)

# 資料預處理與縮放
#StandardScaler 確保每個特徵平均值為零、方差為1
'''scaler=StandardScaler()
scaler.fit(X_train)'''
#RobustScaler 確保特徵屬性在同一範圍,使用的是中位數與四分位數,忽略異常值
#MinMaxScaler 特徵剛好位於0-1之間
'''scaler=MinMaxScaler()
scaler.fit(X_train)'''
#Normalizer對每個特徵向量進行縮放,使其歐式距離等於1

'''X_train_scalered=scaler.transform(X_train)
X_test_scarlered=scaler.transform(X_test)
svc=SVC()
svc.fit(X_train_scalered,y_train)
print(svc.score(X_test_scarlered,y_test))'''


#降維、特徵提取、流型學習
#主成分分析;首先找到方差最大的方向向量,然後找到與第一個方向正交的且包含信心量多的正交向量
scaler=StandardScaler()
scaler.fit(cancer.data)
X_scalered=scaler.transform(cancer.data)
'''pca=PCA(n_components=3)#n_components提取三個主成分,從569個屬性中組合出來3各主要方向屬性,若特徵為正數,那麼這個主成分與特徵相關,一般主成分數與特徵數相同
pca.fit(X_scalered)
X_pca=pca.transform(X_scalered)
print(X_scalered[0])
#print(cancer.data[0])
print(pca.components_)'''
#非負矩陣(NMF):將每個資料點寫成一些分量的加權求和,分量和係數大於0,且只能應用非負資料。(有用的特徵提取)
'''nmf=NMF(n_components=15)#提取15個分量
X_nmf=nmf.fit(X_scalered)'''
#t-SNE流形學習:找到資料的二維表示,允許更復雜的對映,主要用來做視覺化。
'''tsne=TSNE(random_state=4)
X_tsne=tsne.fit_transform(cancer.data)#tnse沒有transform方法
print(X_tsne[0])'''
#聚類
#k均值聚類:將每個資料點分配分配給最近的簇中心,然後將每個簇中心設定成簇內所有資料點的平均值,直到簇不在變化。
kmeans=KMeans(n_clusters=5)
kmeans.fit(cancer.data)
print(kmeans.labels_)
#凝聚聚類:首先預設每個點是自己的簇,然後合併最相似的兩個簇,直到滿足某種停止規則。

#DBSCAN:首先任意選取一個點,然後找到到這個點的距離小於等於eps的所有點,若這些資料點數小於min_samples,那麼這個點被標記為噪聲,若大於min_samples,則這個點為核心樣本。

#調整rand指數和歸一化資訊