官术网_书友最值得收藏!

Non-negative matrix factorization

When the dataset is made up of non-negative elements, it's possible to use non-negative matrix factorization (NNMF) instead of standard PCA. The algorithm optimizes a loss function (alternatively on W and H) based on the Frobenius norm:

If dim(X) = n x m, then dim(W) = n x p and dim(H) = p x m with p equal to the number of requested components (the n_components parameter), which is normally smaller than the original dimensions n and m.

The final reconstruction is purely additive and it has been shown that it's particularly efficient for images or text where there are normally no non-negative elements. In the following snippet, there's an example using the Iris dataset (which is non-negative). The init parameter can assume different values (see the documentation) which determine how the data matrix is initially processed. A random choice is for non-negative matrices which are only scaled (no SVD is performed):

from sklearn.datasets import load_iris
from sklearn.decomposition import NMF

>>> iris = load_iris()
>>> iris.data.shape
(150L, 4L)

>>> nmf = NMF(n_components=3, init='random', l1_ratio=0.1)
>>> Xt = nmf.fit_transform(iris.data)

>>> nmf.reconstruction_err_
1.8819327624141866

>>> iris.data[0]
array([ 5.1, 3.5, 1.4, 0.2])
>>> Xt[0]
array([ 0.20668461, 1.09973772, 0.0098996 ])
>>> nmf.inverse_transform(Xt[0])
array([ 5.10401653, 3.49666967, 1.3965409 , 0.20610779])

NNMF, together with other factorization methods, will be very useful for more advanced techniques, such as recommendation systems and topic modeling.

NNMF is very sensitive to its parameters (in particular, initialization and regularization), so I suggest reading the original documentation for further information:  http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.NMF.html.
主站蜘蛛池模板: 禄丰县| 临西县| 汝阳县| 巴林右旗| 津市市| 滨海县| 阳朔县| 巩留县| 临清市| 新兴县| 张掖市| 柯坪县| 垦利县| 凌海市| 乌苏市| 上犹县| 云梦县| 彰化县| 化德县| 拉孜县| 石嘴山市| 嵊泗县| 邻水| 文成县| 平武县| 大石桥市| 仪陇县| 三江| 日喀则市| 平度市| 灵川县| 凤山市| 湾仔区| 江都市| 曲阳县| 巫山县| 漳平市| 化德县| 临猗县| 漯河市| 吴忠市|