Saya mencoba memprediksi probabilitas X_test dan mendapatkan 2 nilai dalam sebuah array. Saya perlu membandingkan 2 nilai itu dan menjadikannya 1.

Ketika saya menulis kode

y_pred = classifier.predict_proba(X_test)
y_pred

Ini memberikan output seperti

array([[0.5, 0.5],
       [0.6, 0.4],
       [0.7, 0.3],
       ...,
       [0.5, 0.5],
       [0.4, 0.6],
       [0.3, 0.7]])

Kita tahu bahwa jika nilai jika >= 0,5 maka itu dan 1 dan jika kurang dari 0,5 itu 0

Saya mengubah array di atas menjadi panda menggunakan kode di bawah ini

proba = pd.DataFrame(proba)
proba.columns = [['pred_0', 'pred_1']]
proba.head()

Dan keluarannya adalah

    pred_0  pred_1
0   0.5     0.5
1   0.6     0.4
2   0.7     0.3
3   0.4     0.6
4   0.3     0.7

Bagaimana cara mengulangi baris di atas dan menulis kondisi bahwa jika nilai baris kolom 1 lebih besar dari sama dengan 0,5 dengan nilai baris 2, maka itu 1 dan jika nilai baris kolom 1 kurang dari 0,5 jika dibandingkan dengan nilai baris kolom 2.

Misalnya, dengan melihat bingkai data di atas, outputnya harus:

  output
0 0
1 1
2 1
3 1
4 1
0
Nithin Reddy 27 Mei 2021, 16:39

2 jawaban

Jawaban Terbaik

Anda bisa memetakan array awal Anda tanpa mengubahnya menjadi Pandas Dataframe sehingga mengembalikan True ketika nilai pertama dari setiap subarray adalah >= 0,5 dan jika tidak mengembalikan False. Dan akhirnya, ubah menjadi int:

>>> import numpy as np
>>> a = np.array([[0.5, 0.5], [0.6, 0.4], [0.3, 0.7]])
>>> a
array([[0.5, 0.5],
       [0.6, 0.4],
       [0.3, 0.7]])
>>> result = map(lambda x:int(x[0] >= 0.5), a)
>>> print(list(result))
[1, 1, 0]
0
Bastian 27 Mei 2021, 14:05

Bandingkan dua kolom untuk membuat indeks boolean lalu konversi ke int menggunakan astype:

Pilihan 1:

df['output'] = (df['pred_0'] >= df['pred_1']).astype(int)

Pilihan 2:

df['output'] = df['pred_0'].ge(df['pred_1']).astype(int)

Atau melalui np.where:

Opsi 3:

df['output'] = np.where(df['pred_0'] >= df['pred_1'], 1, 0)

Opsi 4:

df['output'] = np.where(df['pred_0'].ge(df['pred_1']), 1, 0)
   pred_0  pred_1  output
0     0.5     0.5       1
1     0.6     0.4       1
2     0.7     0.3       1
3     0.4     0.6       0
4     0.3     0.7       0
0
Henry Ecker 27 Mei 2021, 14:04