生活随笔
收集整理的這篇文章主要介紹了
python-非负矩阵分解-NMF
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
非負矩陣分解
非負矩陣分解是矩陣中所有元素均為非負數約束條件下的矩陣分解,其基本思想:給定一個非負矩陣V,NMF能夠找到一個非負矩陣W和一個非負矩陣H,使得矩陣W和矩陣H的乘積近似等于矩陣V中的值。
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
矩陣:被稱為基礎圖像數據,相當于從原始矩陣中抽取出來的特征。H矩陣:系數矩陣NMF廣泛應用于圖像分析,文本挖掘和語音處理鄰域。NMF矩陣分解優化目標:最小化W矩陣H矩陣的乘積和原始矩陣之間的差別。 傳統目標函數: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?基于KL散度的優化目標,損失函數如下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??在sklearn庫中,可以使用sklearn.decomposition.NMF加載NMF算法,主要參數有: n_components:用于指定分解后矩陣的單個維度k;init:W矩陣和H矩陣的初始化方式,默認為nndsvdar。其他NMF實例: #非負矩陣分解(NMF):'''1.NMF 人臉數據特征提取目標:已知Olivetti 人臉數據供400個,每個數據64*64,由于NMF分解得到的W矩陣相當于從原始矩陣中提取的特征,那么就可以使用NMF對400個人的人臉進行特征提取。2.通過設置k的大小可以設置提取的特征數目,在本實驗中k設置為6,隨后提取特征以圖像的形式展示出來'''import matplotlib.pyplot as plt
from sklearn import decomposition #導入算法
from sklearn.datasets import fetch_olivetti_faces#人臉數據
from numpy.random import RandomState #用于創建隨機種子#設置基本參數并加載數據
n_row,n_col=2,3 #設置圖像展示排列情況
n_components=n_row*n_col #設置提取的特征數目
image_shape=(64,64) #設置人臉數據圖片大小
dataset=fetch_olivetti_faces(shuffle=True,random_state=RandomState(0))
faces=dataset.data #加載數據,打亂順序#設置圖像的展示方式
def plot_gallery(title,images,n_col=n_col,n_row=n_row):plt.figure(figsize=(2.*n_col,2.26*n_row)) #創建圖片,指定大小plt.suptitle(title,size=16) #設置標題,字號大小for i,comp in enumerate(images):plt.subplot(n_row,n_col,i+1) #選擇畫制的子圖vmax=max(comp.max(),-comp.min())plt.imshow(comp.reshape(image_shape),cmap=plt.cm.gray,interpolation='nearest', #對數值歸一化,并以灰度圖形顯示vmin=-vmax,vmax=vmax)plt.xticks(())plt.yticks(()) #去除子圖坐標標簽plt.subplots_adjust(0.01,0.05,0.99,0.93,0.)#子圖間隔調整estimators=[('Eigenfaces -PCA using randomized SVD',decomposition.PCA(n_components=6,whiten=True)),('Non -negative components -NMF',#NMF和PCA實例化并存儲在列表之中decomposition.NMF(n_components=6,init='nndsvda',tol=5e-3))]for name ,estimator in estimators:estimator.fit(faces) #NMF和PCA分別調用提取特征components_=estimator.components_#獲取特征plot_gallery(name,components_[:n_components])#按照國定格式進行排列if __name__=="__main__":plt.show()#可視化
?
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的python-非负矩阵分解-NMF的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。