Python 将数据集划分为培训和测试后,将标签转换为指标矩阵

Python 将数据集划分为培训和测试后,将标签转换为指标矩阵,python,pandas,machine-learning,neural-network,Python,Pandas,Machine Learning,Neural Network,将Y转换为指示器矩阵效果良好: file = 'dataset.csv' X, Y = readFile(file) N = len(Y) T = np.zeros((N, K)) for i in range(N): T[i, Y[i]] = 1 但当我在分成训练和测试之后做同样的事情时,就像这样:我会出错 X, Y = shuffle(X, Y) Ntrain = int(0.7*len(X)) Xtrain, Ytrain = X[:Ntrain], Y[:Ntrai

将Y转换为指示器矩阵效果良好:

file = 'dataset.csv'    
X, Y = readFile(file)
N = len(Y)
T = np.zeros((N, K)) 
for i in range(N):
    T[i, Y[i]] = 1 
但当我在分成训练和测试之后做同样的事情时,就像这样:我会出错

X, Y = shuffle(X, Y)
Ntrain = int(0.7*len(X))
Xtrain, Ytrain = X[:Ntrain], Y[:Ntrain]
Xtest, Ytest = X[Ntrain:], Y[Ntrain:]
N1 = len(Ytrain)
T1 = np.zeros((N1, K))  
for i in range(N1):
    T1[i, Ytrain[i]] = 1 
它在最后一行显示错误:T1[i,Ytrain[i]]=1,哪里出错了? K是类的数量=9

print(np.unique(Y))
print(np.unique(Ytrain))
上述打印声明给出:

[0 1 2 3 4 5 6 7 8]
[0 1 2 3 4 5 6 7 8]

T1的大小为N1*K,您试图在索引Ytrain[i]处设置该值。如果Ytrain[i]>=K,那么您将得到一个键错误

更新:

for i in range(N1):
    print(i)
    T1[i, Ytrain[i]] = 1
这个问题得到了解决: 不知何故,Ytrain并没有任何指数。因此,我将Ytrain转换为熊猫系列:

data = np.array(Ytrain)
Ytrain1 = pd.Series(data)
N1 = len(Ytrain1)
T1 = np.zeros((N1, K))
for i in range(N1): 
   print(i, Ytrain1[i]) # Prints fine 
   T1[i, Ytrain1[i]] = 1 

什么是NTrain?NTrain=int(0.7*len(X))我知道。知道什么数字
int(0.7*len(X))
yieldstrain等于774。Xtrain的形状是(774,12)和Ytrain(774,)打印
Ytrain
并用输出编辑您的问题Y和Ytrain中的唯一值都是[0 1 2 3 4 5 6 7 8],那么为什么这个错误只出现在Ytrain而不是Y的情况下,您知道吗?k的值是多少?另外,为了帮助调试并找到确切的问题,您可以查看我回答中的更新,这很奇怪。Ytrain有一个索引,因为它有形状(774,)。小心点,很高兴它现在对你有用!