有没有办法用于sklearn.model_selection.train_test_split保留训练集中特定列的所有唯一值.
让我举一个例子.我所知道的最常见的矩阵分解问题是在Netflix Challenge或Movielens数据集中预测用户的电影评级.现在这个问题并不是真正围绕任何单一的矩阵分解方法,但在可能性范围内,有一个组只能对已知的用户和项目组合进行预测.
因此,在Movielens 100k中,我们有943个独特用户和1682个独特电影.如果我们train_test_split甚至使用高train_size比率(比如0.9),那么独特用户和电影的数量就不一样了.这提出了一个问题,因为我提到的一组方法无法为电影或未经过培训的用户预测0.这是我的意思的一个例子.
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
ml = pd.read_csv('ml-100k/u.data', sep='\t', names=['User_id', 'Item_id', 'Rating', 'ts'])
ml.head()
User_id Item_id Rating ts
0 196 242 3 881250949
1 186 302 3 891717742
2 22 377 1 878887116
3 244 51 2 880606923
4 166 346 1 886397596
ml.User_id.unique().size
943
ml.Item_id.unique().size
1682
utrain, utest, itrain, itest, rtrain, rtest = train_test_split(ml, train_size=0.9)
np.unique(utrain).size
943 …Run Code Online (Sandbox Code Playgroud) 我寻找一个具有python接口的NMF实现,并处理丢失的数据和零.
我不希望在开始分解之前估算我的缺失值,我希望在最小化函数中忽略它们.
似乎既不是scikit-learn,也不是nimfa,也不是graphlab,也不是mahout提出这样的选择.
谢谢!
python machine-learning collaborative-filtering scikit-learn matrix-factorization
我想比较算法的输出与不同的预处理数据:NMF和PCA.为了获得可比较的结果,而不是为每个PCA和NMF选择相同数量的组件,我想选择解释的量,例如95%的保留方差.
我想知道是否有可能确定NMF每个组成部分保留的差异.
例如,使用PCA,这将通过以下方式给出:
retainedVariance(i) = eigenvalue(i) / sum(eigenvalue)
有任何想法吗?
pca dimensionality-reduction scikit-learn matrix-factorization nmf
我正在使用C#6.0中基于项目的协同过滤器为餐馆推荐一个推荐系统.我想设置我的算法以尽可能好地执行,所以我已经做了一些关于预测用户尚未审查的餐馆评级的不同方法的研究.
我将从我所做的研究开始
首先,我想建立一个基于用户的协作过滤器,使用用户之间的皮尔逊相关性,以便能够看到哪些用户很好地融合在一起.
这个问题的主要问题是能够计算这种相关性所需的数据量.首先,您需要在同一家餐厅每2位用户进行4次评论.但我的数据将非常稀少.2个用户不太可能会审查完全相同的4家餐馆.我想通过扩大匹配条款来解决这个问题(即不匹配相同餐馆的用户,但是在相同类型的餐馆),但这给了我一个问题,即很难确定我将在相关性中使用哪些评论,因为用户可以在"快餐"类型的餐厅留下3条评论.其中哪一个最符合其他用户对快餐店的评价?
经过更多的研究,我得出结论,基于项目的协作过滤器优于基于用户的协作过滤器.但同样,我遇到了数据稀疏性问题.在我的测试中,我成功地计算了用户尚未审查的餐馆评级的预测,但是当我在稀疏数据集上使用该算法时,结果不够好.(大多数时候,两家餐馆之间不可能有相似之处,因为没有2位用户评价同一家餐厅).
经过更多研究后,我发现使用矩阵分解方法可以很好地处理稀疏数据.
现在我的问题
我一直在互联网上寻找使用这种方法的教程,但我没有任何推荐系统的经验,我对代数的了解也很有限.我理解方法的正义.你有一个矩阵,你有1边用户,另一边有餐馆.每个单元格是用户在餐厅上给出的评级.
矩阵分解方法创建两个这样的矩阵,一个具有用户和餐馆类型之间的权重,另一个具有餐馆和这些类型之间的权重.
我无法弄清楚的是如何计算餐厅类型和餐馆/用户之间的权重(如果我正确理解矩阵分解).我找到了几十个计算这些数字的公式,但我无法弄清楚如何将它们分解并应用于我的应用程序中.
我将举例说明数据在我的应用程序中的外观:
在此表中,U1代表用户,R1代表餐馆.每个餐厅都有自己的标签(餐厅类型).即R1具有"意大利"标签,R2具有"快餐"等.
| R1 | R2 | R3 | R4 |
U1 | 3 | 1 | 2 | - |
U2 | - | 3 | 2 | 2 |
U3 | 5 | 4 | - | 4 |
U4 | - | - | 5 | - |
Run Code Online (Sandbox Code Playgroud)
有没有人可以指出我正确的方向或解释我应该如何在我的数据上使用这种方法?任何帮助将不胜感激!
我对大型稀疏矩阵的Cholesky分解感兴趣.我遇到的问题是Cholesky因子不一定是稀疏的(就像两个稀疏矩阵的乘积不一定稀疏).
例如,对于仅沿第一行,第一列和对角线具有非零的矩阵,Cholesky因子具有100%填充(下三角和上三角是100%密集的).在下图中,灰色不为零,白色为零.

我知道的一个解决方案是找到置换P矩阵并进行P T AP的Cholesky分解 .例如,通过应用排列矩阵来使用相同的矩阵,该排列矩阵将第一行移动到最后一行并且将第一列移动到最后一列,Cholesky因子是稀疏的.

我的问题是如何确定P一般?
要了解A和P T AP的Cholesky分解与更逼真的矩阵的区别,请参见下图.我从http://www.seas.ucla.edu/~vandenbe/103/lectures/chol.pdf中获取了所有这些图像.

据讲义说
存在许多启发式方法(我们没有涵盖)用于选择良好的置换矩阵P.
我想知道其中一些方法是什么(C,C++甚至Java中的代码都是理想的).
我正在使用目前在http://www.quuxlabs.com/blog上提供的代码
它给出了很好的结果.我可以清楚地看到矩阵发生了什么变化.
我也尝试在sklearn.decomposition.NMF上使用sklearn库 但是我用相同的输入得到的结果还不够好.也许我错过了什么.
这是我的示例代码 -
from sklearn.decomposition import NMF , ProjectedGradientNMF
R = [
[5,3,0,1],
[4,0,0,1],
[1,1,0,5],
[1,0,0,4],
[0,1,5,4],
]
R = numpy.array(R)
nmf = NMF(beta=0.001, eta=0.0001, init='random', max_iter=2000,nls_max_iter=20000, random_state=0, sparseness=None,tol=0.001)
nR = nmf.fit_transform(R)
print nR
print
print nmf.reconstruction_err_
print
Run Code Online (Sandbox Code Playgroud)
它不是维护矩阵中的退出/填充值,因为我可以使用博客中给出的代码看到.
有人可以帮我理解!
我正在尝试在Tensorflow中进行非常简单的优化 - 矩阵分解的问题.给定矩阵V (m X n),将其分解为W (m X r)和H (r X n).我从这里借用基于梯度下降的基于张量流的矩阵分解实现.
要以[0,1]的比例输入条目,我执行以下预处理.
f(x) = f(x)-min(V)/(max(V)-min(V))
Run Code Online (Sandbox Code Playgroud)
我的问题是:
W和H?|A-WH|_F和|(A-WH)/A|?最小的工作示例如下:
import tensorflow as tf
import numpy as np
import pandas as pd
V_df = pd.DataFrame([[3, 4, 5, 2],
[4, 4, 3, 3],
[5, 5, 4, 4]], dtype=np.float32).T
Run Code Online (Sandbox Code Playgroud)
因此,V_df看起来像:
0 1 2
0 3.0 4.0 5.0
1 4.0 4.0 5.0
2 5.0 3.0 …Run Code Online (Sandbox Code Playgroud) 我有一个大的(~25000 x 1000)矩阵来分解.我基于numpy编写了自己的代码,但它效率低下并且不断引发内存错误.
我一直在尝试安装和使用nimfa(http://nimfa.biolab.si/)和安装过程(尝试easy_install,pip,下载并运行git)没有显示任何错误.但是当我尝试使用它时,import nimfa我得到以下错误.我检查了nimfa先决条件,除了numpy和scipy之外没有提到任何东西.
我在Windows 8上,使用安装了numpy和scipy的Python 2.7.5.我也尝试过安装(并随后卸载)minGW并执行此操作.
有任何想法吗?
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
import nimfa
File "C:\Python27\lib\site-packages\nimfa-1.0-py2.7.egg\nimfa\__init__.py", line 18, in <module>
from mf_run import *
File "C:\Python27\lib\site-packages\nimfa-1.0-py2.7.egg\nimfa\mf_run.py", line 26, in <module>
from utils import *
File "C:\Python27\lib\site-packages\nimfa-1.0-py2.7.egg\nimfa\utils\__init__.py", line 8, in <module>
import linalg
File "C:\Python27\lib\site-packages\nimfa-1.0-py2.7.egg\nimfa\utils\linalg.py", line 15, in <module>
import scipy.sparse.linalg as sla
File "C:\Python27\lib\site-packages\scipy\sparse\linalg\__init__.py", line 100, in <module>
from .isolve import *
File "C:\Python27\lib\site-packages\scipy\sparse\linalg\isolve\__init__.py", line 6, in <module> …Run Code Online (Sandbox Code Playgroud) 给定MatrixFactorizationModel什么是返回用户产品预测的完整矩阵的最有效方法(在实践中,通过某个阈值过滤以保持稀疏性)?
通过当前的API,曾经可以将用户产品的笛卡尔积传递给预测函数,但在我看来,这将进行大量的额外处理.
访问私有userFeatures,productFeatures是正确的方法,如果是这样,有没有一种好方法利用框架的其他方面以有效的方式分发这个计算?具体来说,是否有一种简单的方法可以做得比将所有的userFeature,productFeature"手动"相乘?
对于我的项目,我需要求矩阵X给定矩阵Y和K.(XY = K)每个矩阵的元素必须是以随机256位素数为模的整数.我解决这个问题的第一次尝试使用了SymPy的mod_inv(n)功能.这个问题是我的内存耗尽了大约30的矩阵.我的下一个想法是执行矩阵分解,因为它可能对内存不太重.但是,SymPy似乎不包含可以找到模数的矩阵的求解器.我可以使用任何变通办法或自制代码吗?
python ×6
matrix ×4
scikit-learn ×4
numpy ×3
algorithm ×2
apache-spark ×1
c# ×1
math ×1
nmf ×1
pandas ×1
pca ×1
scipy ×1
sympy ×1
tensorflow ×1