博主簡介:風雪夜歸子(英文名: allen),機器學習演算法攻城獅,喜愛鑽研machine learning的黑科技,對deep learning和artificial intelligence充滿興趣,經常關注kaggle資料探勘競賽平台,對資料、machine learning和artificial intelligence有興趣的各位童鞋可以一起**哦,個人csdn部落格:
截斷奇異值分解(truncated singular value decomposition,tsvd)是一種矩陣因式分解(factorization)技術,將矩陣m
分解成u
,σ σ
和v
。它與pca很像,只是svd分解是在資料矩陣上進行,而pca是在資料的協方差矩陣上進行。通常,svd用於發現矩陣的主成份。
tsvd與一般svd不同的是它可以產生乙個指定維度的分解矩陣。例如,有乙個n×n
矩陣,通過svd分解後仍然是乙個n×n
矩陣,而tsvd可以生成指定維度的矩陣。這樣就可以實現降維了。
這裡我們還用iris
資料集來演示tsvd:
in [1]:
fromtsvd物件的用法和其他物件類似。首先匯入需要的類,初始化,然後擬合:sklearn.datasets
import
load_iris
iris
=load_iris
()iris_data
=iris
.data
in [5]:
fromin [6]:sklearn.decomposition
import
truncatedsvd
svd=truncatedsvd(2
)iris_transformed
=svd
.fit_transform
(iris_data
)iris_data[:5
]
array([[ 5.1, 3.5, 1.4, 0.2],in [7]:[ 4.9, 3. , 1.4, 0.2],
[ 4.7, 3.2, 1.3, 0.2],
[ 4.6, 3.1, 1.5, 0.2],
[ 5. , 3.6, 1.4, 0.2]])
iris_transformed[:5]
array([[ 5.91220352, -2.30344211],最終結果如下圖所示:[ 5.57207573, -1.97383104],
[ 5.4464847 , -2.09653267],
[ 5.43601924, -1.87168085],
[ 5.87506555, -2.32934799]])
in [10]:
%matplotlib inlineimport
matplotlib.pyplot
aspltf=
plt.
figure
(figsize=(
5,5))
ax=f.
add_subplot
(111)ax
.scatter
(iris_transformed
[:,0
],iris_transformed
[:,1],c
=iris
.target)ax
.set_title
("truncated svd, 2 components"
)
現在我們演示了scikit-learn的truncatedsvd
模組,讓我們看看只用scipy
學習一些細節。
首先,我們用scipy
的linalg
處理svd:
in [12]:
importnumpy
asnp
from
scipy.linalg
import
svdd=np
.array
([[1,2
],[1,
3],[1
,4]])d
array([[1, 2],in [13]:[1, 3],
[1, 4]])
u,s,v=
svd(d,
full_matrices
=false)u
.shape,s
.shape,v
.shape
((3, 2), (2,), (2, 2))我們可以根據svd的定義,用
u u,s
s和vv
還原矩陣
d d:
in [15]:
np.diag(s
)
array([[ 5.64015854, 0. ],in [16]:[ 0. , 0.43429448]])
np.dot(u.
dot(np.
diag(s
)),v
)
array([[ 1., 2.],[ 1., 3.],
[ 1., 4.]])
truncatedsvd
返回的矩陣是
u u和s
s的點積。如果我們想模擬tsvd,我們就去掉最新奇異值和對於
u u
的列向量。例如,我們想要乙個主成份,可以這樣:
in [17]:
new_s=s[0]new_u=u
[:,0
]new_u
.dot
(new_s
)
array([-2.20719466, -3.16170819, -4.11622173])一般情況下,如果我們想要截斷維度
t t
,那麼我們就去掉n−
t n−t
個奇異值。
truncatedsvd
還有一些細節需要注意。
符號翻轉(sign flipping)
truncatedsvd
有個「陷阱」。隨著隨機數生成器狀態的變化,truncatedsvd
連續地擬合會改變輸出的符合。為了避免這個問題,建議只用truncatedsvd
擬合一次,然後用其他變換。這正是管線命令的另乙個用處。
要避免這種情況,可以這樣:
in [23]:
tsvd=truncatedsvd(2
)tsvd
.fit
(iris_data
)tsvd
.transform
(iris_data
)[:5
]
array([[ 5.91220352, -2.30344211],稀疏矩陣[ 5.57207573, -1.97383104],
[ 5.4464847 , -2.09653267],
[ 5.43601924, -1.87168085],
[ 5.87506555, -2.32934799]])
truncatedsvd
相比pda的乙個優勢是truncatedsvd
可以操作pda處理不了的矩陣。這是因為pca必須計算協方差矩陣,需要在整個矩陣上操作,如果矩陣太大,計算資源可能會不夠用。
系列二 資料預處理
旨在對資料探勘有個系統的認識,這部分僅僅是對於資料預處理!對於常規的資料預處理主要分為以下4步驟 1 資料清洗 解決缺失值 異常值 離群點的問題 2 資料整合 解決樣本重複 指標構建 屬性高度相似的問題 2 資料規約 解決資料規模過大的問題 4 資料變換 將資料轉化為更方便分析的資料 1 填充缺失值...
資料預處理系列 (五)分類變數處理
博主簡介 風雪夜歸子 英文名 allen 機器學習演算法攻城獅,喜愛鑽研machine learning的黑科技,對deep learning和artificial intelligence充滿興趣,經常關注kaggle資料探勘競賽平台,對資料 machine learning和artificial...
資料預處理系列 (十)用因子分析降維
博主簡介 風雪夜歸子 英文名 allen 機器學習演算法攻城獅,喜愛鑽研machine learning的黑科技,對deep learning和artificial intelligence充滿興趣,經常關注kaggle資料探勘競賽平台,對資料 machine learning和artificial...