我正在尝试做一些与上一个问题非常相似的事情,但我遇到了错误.我有一个包含功能和标签的pandas数据框我需要进行一些转换以将功能和标签变量发送到机器学习对象:
import pandas
import milk
from scikits.statsmodels.tools import categorical
Run Code Online (Sandbox Code Playgroud)
然后我有:
trainedData=bigdata[bigdata['meta']<15]
untrained=bigdata[bigdata['meta']>=15]
#print trainedData
#extract two columns from trainedData
#convert to numpy array
features=trainedData.ix[:,['ratio','area']].as_matrix(['ratio','area'])
un_features=untrained.ix[:,['ratio','area']].as_matrix(['ratio','area'])
print 'features'
print features[:5]
##label is a string:single, touching,nuclei,dust
print 'labels'
labels=trainedData.ix[:,['type']].as_matrix(['type'])
print labels[:5]
#convert single to 0, touching to 1, nuclei to 2, dusts to 3
#
tmp=categorical(labels,drop=True)
targets=categorical(labels,drop=True).argmax(1)
print targets
Run Code Online (Sandbox Code Playgroud)
输出控制台首先产生:
features
[[ 0.38846334 0.97681855]
[ 3.8318634 0.5724734 ]
[ 0.67710876 1.01816444]
[ 1.12024943 0.91508699]
[ 7.51749674 1.00156707]]
labels
[[single]
[touching] …Run Code Online (Sandbox Code Playgroud) 是否有一个内置的方法可以帮助我有效地实现以下目标:给定一个数组,我需要一个数组列表,每个数组都有索引到数组的不同唯一值?
如果f是所需的功能,
b = f(a)
Run Code Online (Sandbox Code Playgroud)
和
u, idxs = unique(a)
Run Code Online (Sandbox Code Playgroud)
然后
b[i] == where(idxs==i)[0]
Run Code Online (Sandbox Code Playgroud)
我知道pandas.Series.groupby()可以做到这一点,但是当有超过10 ^ 5个唯一整数时创建一个dict可能没有效率.