我想了解如何提高分类的 f1_score 的建议。我目前的数值约为 0.57。数据集:
lotWaferDie - 测量缺陷的批次、电路板和芯片
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
通过对特征进行最少的预处理(仅在
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
似乎有周期性趋势,因此您可以提取的批号可能存在周期性(这将使模型更容易找到相关信号)。
一般来说,你的特征是二维的,所以使用卷积神经网络也可能是有效的。您的数据集中的一个示例,显示了缺陷如何倾向于出现在边缘和下部中心: