Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将概率向量转换为目标向量?_Python_Numpy_Machine Learning - Fatal编程技术网

在python中将概率向量转换为目标向量?

在python中将概率向量转换为目标向量?,python,numpy,machine-learning,Python,Numpy,Machine Learning,我在sklearn的iris数据集上做逻辑回归,我知道数学并尝试实现它。在最后一步,我得到一个预测向量,这个预测向量表示该数据点到类1或类2(二进制分类)的概率 现在我想把这个预测向量变成目标向量。假设概率大于50%,则相应的数据点将属于类别1,否则为类别2。使用0表示类1,使用1表示类2 我知道它有一个for-loop版本,只是在整个向量中循环。但是当大小变大时,for循环非常昂贵,所以我想更有效地执行它,就像numpy的矩阵运算一样,它比在for循环中执行矩阵运算更快 对更快的方法有什么建议

我在sklearn的iris数据集上做逻辑回归,我知道数学并尝试实现它。在最后一步,我得到一个预测向量,这个预测向量表示该数据点到类1或类2(二进制分类)的概率

现在我想把这个预测向量变成目标向量。假设概率大于50%,则相应的数据点将属于类别1,否则为类别2。使用0表示类1,使用1表示类2

我知道它有一个for-loop版本,只是在整个向量中循环。但是当大小变大时,for循环非常昂贵,所以我想更有效地执行它,就像numpy的矩阵运算一样,它比在for循环中执行矩阵运算更快

对更快的方法有什么建议吗

import numpy as np

a = np.matrix('0.1 0.82')
print(a)

a[a > 0.5] = 1
a[a <= 0.5] = 0
print(a)
更新:
对于多类或更通用的解决方案,请使用

np.argmax(y_hat,轴=1)

对于具有多个类的多个向量的2D数组,更通用的解决方案是:

import numpy as np
a = np.array( [ [.5, .3, .2], 
                [.1, .2, .7], 
                [ 1,  0,  0] ] )

idx = np.argmax(a, axis=-1)
a = np.zeros( a.shape )
a[ np.arange(a.shape[0]), idx] = 1

print(a)
输出:

[[1. 0. 0.]
 [0. 0. 1.]
 [1. 0. 0.]]    

如果您希望随后使用混淆矩阵等进行处理,并再次在scikit中获取目标变量的原始格式:
array([10…1])
您可以使用:

a = clf.predict_proba(X_test)[:,1]
a = np.where(a>0.5, 1, 0)

[:,1]
引用第二类(在我的例子中:1),在我的例子中,第一类是0

选项1:如果您进行二进制分类,并且有1d预测向量,那么您的解决方案是:

选项2:如果您有一个n维单热预测矩阵,但希望有标签,则可以使用。这将返回带标签的1d向量:

prob = model.predict(X_test)
y = np.argmax(prob, axis=1)

vec=prob>0.5…这真的很有帮助
a = clf.predict_proba(X_test)[:,1]
a = np.where(a>0.5, 1, 0)
prob = model.predict(X_test)
Y = np.round(prob)
prob = model.predict(X_test)
y = np.argmax(prob, axis=1)