提高我的分类 f1_score - pandas/sklearn

问题描述 投票:0回答:1

我想了解如何提高分类的 f1_score 的建议。我目前的数值约为 0.57。数据集:

lotWaferDie - 测量缺陷的批次、电路板和芯片

  • 字符串值,如 W02-D12_11,..

XRel - 缺陷在轴上的相对位置 X

YRel - 缺陷在 Y 轴上的相对位置

XSize - X 轴缺陷的尺寸

YSize - Y 轴缺陷的尺寸

DefArea - 缺陷区域

DefSize - 缺陷的大小

dieRow - 板上缺陷的行

dieCol - 板上的缺陷列

xidx - 板上缺陷线的索引

yidx - 板上缺陷列的索引

失败 - 1/0 我的预测

以下是我尝试过的一些步骤 我尝试将很多 WaferDie 切成 3 部分。 至于 xidx 和 yidx 栏,我不确定它们的重要性,但是删除它们并没有什么区别

df[['L', 'W', 'D']] = df['lotWaferDie'].str.split('-|_', expand=True)
df = df.drop(columns=['lotWaferDie'])

# use one-hot encoding
for col in df.select_dtypes(object).columns:
    df = pd.concat([
        df.drop(col, axis=1), pd.get_dummies(df[col], prefix=('d_' + col))
    ], axis=1)


# 
Xtrain, Xrest, ytrain, yrest = train_test_split(
    df.drop(columns=['fail']), df.fail, test_size=0.4, random_state=random_seed, stratify=df.fail
)


Xtest, Xval, ytest, yval = train_test_split(
    Xrest, yrest, test_size=0.5, random_state=random_seed, stratify=yrest
)

param_grid = {
    'max_depth': range(1, 40), 
    'criterion': ['entropy']
}
param_comb = ParameterGrid(param_grid)
from sklearn.metrics import f1_score
val_acc = []
param_f1_pairs = []  

for i,params in enumerate(param_comb):
    dt = DecisionTreeClassifier(max_depth=params['max_depth'], criterion=params['criterion'])
    dt.fit(Xtrain, ytrain)
    
    val_acc.append(metrics.accuracy_score(yval, dt.predict(Xval)))
    val_score = accuracy_score(yval, dt.predict(Xval))
    print(f"Iteration {i+1}/{len(param_comb)} - Validation Score: {val_score:.4f} - Parameters: {params}")
    
    predicted_classes = dt.predict(Xtest)
    f1 = f1_score(ytest, predicted_classes)
    param_f1_pairs.append((params, f1))  
    print("F1 skóre:", f1)

所有程序:https://onecompiler.com/python/42antqzp8 数据集:https://easyupload.io/3y2kou

python pandas dataframe scikit-learn dataset
1个回答
0
投票

通过对特征进行最少的预处理(仅在

OrdinalEncoder
上使用
lotWaferDie
),使用
HistGradientBoostingRegressor(lr=0.3, max_iter=300, class_weight=balanced)
时我得到的平均 CV5 验证 F1 分数为 61.7%,使用
RandomForestClassifier()
时为 59.%。您也许可以对它们进行调音和合奏(使用
VotingClassifier
StackingClassifier
)以获得更好的分数。

查看特征的直方图,一些特征具有很强的双峰性,并且同时具有 X 和 Y 分量。

您可以尝试设计新功能来捕获与主模式的“2D”距离。

lot_encoded
似乎有周期性趋势,因此您可以提取的批号可能存在周期性(这将使模型更容易找到相关信号)。

一般来说,你的特征是二维的,所以使用卷积神经网络也可能是有效的。您的数据集中的一个示例,显示了缺陷如何倾向于出现在边缘和下部中心:

© www.soinside.com 2019 - 2024. All rights reserved.