偏最小二乘(PLS)算法在scikit-learn库中实现,如下所述: http://scikit-learn.org/0.12/auto_examples/plot_pls.html 在y是二进制矢量的情况下,使用该算法的变体,偏最小二乘判别分析(PLS-DA)算法。 sklearn.pls中的PLSRegression模块是否也实现了这种二进制情况?如果没有,我在哪里可以找到它的python实现? 在我的二进制文件中,我正在尝试使用PLSRegression:
pls = PLSRegression(n_components=10)
pls.fit(x, y)
x_r, y_r = pls.transform(x, y, copy=True)
在转换函数中,代码在此行中获得异常:
y_scores = np.dot(Yc, self.y_rotations_)
错误消息是“ValueError:矩阵未对齐”。 Yc是规范化的y向量,self.y_rotations_ = [1.]。 在拟合函数中,如果原始y是单变量向量(y.shape 1 = 1),则self.y_rotations_ = np.ones(1)。
答案 0 :(得分:16)
PLS-DA实际上是将PLS用于分类结果而非通常的连续向量/矩阵的“技巧”。技巧包括创建零/ 1的虚拟单位矩阵,表示每个类别的成员资格。因此,如果您有预测的二元结果(即男/女,是/否等),您的虚拟矩阵将有两列代表任一类别的成员资格。
例如,考虑四个人的结果性别:2名男性和2名女性。虚拟矩阵应编码为:
import numpy as np
dummy=np.array([[1,1,0,0],[0,0,1,1]]).T
,其中每列代表两个类别(男性,女性)的成员资格
然后,变量Xdata(形状4行,任意列)中的数据模型将为:
myplsda=PLSRegression().fit(X=Xdata,Y=dummy)
可以从mypred中的两个指标变量的比较中提取预测类别:
mypred= myplsda.predict(Xdata)
对于每一行/案例,预测的性别是具有最高预测成员资格的性别。
答案 1 :(得分:1)
答案 2 :(得分:0)
不完全是您正在寻找的,但是您可以查看这两个线程,了解如何从python和c ++ PLS库实现中调用本机(c / c ++代码):
您可以使用boost.python将c ++代码嵌入到python中。以下是official site:
的示例遵循C / C ++传统,让我们从“你好,世界”开始吧。一个C ++函数:
char const* greet()
{
return "hello, world";
}
可以通过编写Boost.Python包装器来暴露给Python:
#include <boost/python.hpp>
BOOST_PYTHON_MODULE(hello_ext)
{
using namespace boost::python;
def("greet", greet);
}
就是这样。我们完成了。我们现在可以将其构建为共享库。现在可以看到生成的DLL。这是一个示例Python会话:
>>> import hello_ext
>>> print hello_ext.greet()
hello, world