首页 > 解决方案 > 在钞票数据集中搜索 3 个比较的最佳方法

问题描述

所以,我需要创建一个带有 3 个简单比较的分类器来检测假钞票,基于这样的伪代码:

假设您正在检查具有 f_1 、f_2 、f_3 和 f_4 特征的账单,您的规则可能如下所示:

if ( f_1 > 4) and ( f_2 > 8) and ( f_4 < 25):
  x = " good "
else :
  x = " fake "

最好使用什么 - lambda?我从这个开始:

distdf = {
f1 : banknote['variance'] 
f2 : banknote['skewness'] 
f3 : banknote['curtosis']
f4 : banknote['entropy'] 
}

但我不确定如何进行。这是使用著名的钞票身份验证数据集:可在 Kaggle 上找到的 BankNote_Authentication.csv。

标签: pandassklearn-pandas

解决方案


我们可以尝试np.where检查所有条件并应用相应的标签。无需将列别名为f1,f2f3

banknote_df['classifier'] = np.where(
    (banknote_df['variance'] > 4) &
    (banknote_df['skewness'] > 8) &
    (banknote_df['entropy'] < 25),
    'good',
    'fake'
)

示例程序:

import numpy as np
import pandas as pd

banknote_df = pd.DataFrame({
    'variance': [2.2156, 4.4795, 1.866, 3.47578, 0.697854],
    'skewness': [9.45647, 8.54688, -5.4568, 6.15258, -3.4564],
    'curtosis': [-1.12245, -1.2454, 2.75, -6.5468, 3.45875],
    'entropy': [-0.424514, -2.45687, 0.1230152, -6.1254, -0.45241],
    'class': [0, 0, 0, 0, 0]
})

banknote_df['classifier'] = np.where(
    (banknote_df['variance'] > 4) &
    (banknote_df['skewness'] > 8) &
    (banknote_df['entropy'] < 25),
    'good',
    'fake'
)
print(banknote_df)

banknote_df

   variance  skewness  curtosis   entropy  class classifier
0  2.215600   9.45647  -1.12245 -0.424514      0       fake
1  4.479500   8.54688  -1.24540 -2.456870      0       good
2  1.866000  -5.45680   2.75000  0.123015      0       fake
3  3.475780   6.15258  -6.54680 -6.125400      0       fake
4  0.697854  -3.45640   3.45875 -0.452410      0       fake


推荐阅读