python中的PLS-DA算法

2024-05-14 23:52:14 发布

您现在位置:Python中文网/ 问答频道 /正文

偏最小二乘(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)。


Tags: 函数self算法http二进制情况transformscikit
3条回答

不完全是您想要的,但是您可以检查这两个线程,了解如何从python和c++PLS libs实现调用本机(c/c++代码):

Partial Least Squares Library

Calling C/C++ from python?

您可以使用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可见。下面是一个示例Python会话:

>>> import hello_ext
>>> print hello_ext.greet()
hello, world

您可以在SKLearn中使用线性判别分析包,它将y值取整数:

LDA-SKLearn

以下是关于如何使用LDA的简短教程: sklearn LDA tutorial

PLS-DA实际上是一个“技巧”,用PLS代替通常的连续向量/矩阵用于分类结果。这个技巧包括创建一个由0/1组成的虚拟身份矩阵,表示每个类别的成员身份。因此,如果您有一个二元结果要预测(即男性/女性,是/否,等等),您的虚拟矩阵将有两列表示任一类别的成员资格。

例如,考虑四个人的结果性别:2男2女。虚拟矩阵应编码为:

import numpy as np
dummy=np.array([[1,1,0,0],[0,0,1,1]]).T

,其中每一列表示两个类别(男性、女性)的成员身份

那么,变量扩展数据(形状4行,任意列)中的数据模型是:

myplsda=PLSRegression().fit(X=Xdata,Y=dummy)

预测类别可从mypred中两个指标变量的比较中提取:

mypred= myplsda.predict(Xdata)

对于每一行/案例,预测的性别是具有最高预测成员的性别。

相关问题 更多 >

    热门问题