所以我使用以前训练有素的模型来预测新数据
y_pred_aplikasi = model.predict(X_aplikasi)
y_pred_aplikasi
返回
array([[7.7066602e-07, 9.9993092e-01, 4.6858725e-07],
[7.1568817e-02, 4.3571211e-07, 7.3567069e-01],
[9.8825598e-01, 6.3803792e-03, 4.4066067e-07],
...,
[3.8332163e-15, 1.0000000e+00, 1.4775689e-11],
[1.8400473e-14, 1.0000000e+00, 6.1960957e-11],
[7.0748132e-01, 5.9783965e-02, 5.7850748e-02]], dtype=float32)
我想将该序列做成这样,每个部分的最大值变为1,其余部分变为0。
A B C
0 1 0
0 0 1
1 0 0
....
1 0 0
0 0 1
1 0 0
我如何用熊猫来做到这一点?
答案 0 :(得分:1)
将其视为您的数组:
In [841]: a
Out[841]:
array([[7.7066602e-07, 9.9993092e-01, 4.6858725e-07],
[7.1568817e-02, 4.3571211e-07, 7.3567069e-01],
[9.8825598e-01, 6.3803792e-03, 4.4066067e-07],
[3.8332163e-15, 1.0000000e+00, 1.4775689e-11],
[1.8400473e-14, 1.0000000e+00, 6.1960957e-11],
[7.0748132e-01, 5.9783965e-02, 5.7850748e-02]])
使用pd.DataFrame constructor
将上述数组转换为数据框:
In [851]: df = pd.DataFrame(a, columns=['A', 'B', 'C'])
In [852]: df
Out[852]:
A B C
0 7.706660e-07 9.999309e-01 4.685873e-07
1 7.156882e-02 4.357121e-07 7.356707e-01
2 9.882560e-01 6.380379e-03 4.406607e-07
3 3.833216e-15 1.000000e+00 1.477569e-11
4 1.840047e-14 1.000000e+00 6.196096e-11
5 7.074813e-01 5.978397e-02 5.785075e-02
使用df.where
和df.max(axis=1)
将max
的值替换为1
,否则将0
替换为
In [854]: df = df.eq(df.where(df != 0).max(1), axis=0).astype(int)
In [855]: df
Out[855]:
A B C
0 0 1 0
1 0 0 1
2 1 0 0
3 0 1 0
4 0 1 0
5 1 0 0
答案 1 :(得分:0)
手动遍历每个元素都可以,但是不能确定这对于您的应用程序是多么可行。
for i in range(len(y_pred_aplikasi)):
for j in range(3):
# for j in range(len(y_pred_aplikasi[i])): # to be more dynamic
if y_pred_aplikasi[i][j] == y_pred_aplikasi[i].max():
y_pred_aplikasi[i][j] = 1
else:
y_pred_aplikasi[i][j] = 0
y_pred_aplikasi.astype(int)
Out[5]:
array([[0, 1, 0],
[0, 0, 1],
[1, 0, 0],
...,
[0, 1, 0],
[0, 1, 0],
[1, 0, 0]])