偏最小二乘(PLS)算法在scikit学习库中实现,如下所述: http://scikit-learn.org/0.12/auto_examples/plot_pls.html 在y是二进制向量的情况下,使用该算法的一种变体,偏最小二乘判别分析(PLS-DA)算法。 pls中的plsregresion模块是否也实现了这种二进制情况?如果不是,我在哪里可以找到它的python实现? 在我的二进制例子中,我试图使用plsregresion:
pls = PLSRegression(n_components=10)
pls.fit(x, y)
x_r, y_r = pls.transform(x, y, copy=True)
在transform函数中,代码在以下行中获取异常:
y_scores = np.dot(Yc, self.y_rotations_)
错误消息是“ValueError:矩阵未对齐”。Yc是标准化的y向量,并且self.y_旋转=[1.]。 在fit函数中,如果原始y是一个单变量向量(y.shape1=1),则self.y_旋转为(1)。
不完全是您想要的,但是您可以检查这两个线程,了解如何从python和c++PLS libs实现调用本机(c/c++代码):
Partial Least Squares Library
Calling C/C++ from python?
您可以使用boost.python将c++代码嵌入到python中。以下是从official site中获取的示例:
遵循C/C++传统,让我们从“你好,世界”开始。一个C++函数:可以通过编写Boost.Python包装器向Python公开:
就这样。我们完了。我们现在可以将其构建为共享库。生成的DLL现在对Python可见。下面是一个示例Python会话:
您可以在SKLearn中使用线性判别分析包,它将y值取整数:
LDA-SKLearn
以下是关于如何使用LDA的简短教程: sklearn LDA tutorial
PLS-DA实际上是一个“技巧”,用PLS代替通常的连续向量/矩阵用于分类结果。这个技巧包括创建一个由0/1组成的虚拟身份矩阵,表示每个类别的成员身份。因此,如果您有一个二元结果要预测(即男性/女性,是/否,等等),您的虚拟矩阵将有两列表示任一类别的成员资格。
例如,考虑四个人的结果性别:2男2女。虚拟矩阵应编码为:
,其中每一列表示两个类别(男性、女性)的成员身份
那么,变量扩展数据(形状4行,任意列)中的数据模型是:
预测类别可从mypred中两个指标变量的比较中提取:
对于每一行/案例,预测的性别是具有最高预测成员的性别。
相关问题 更多 >
编程相关推荐