gpt4 book ai didi

python - 使用极其不平衡且相关性较差的数据集

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:58 24 4
gpt4 key购买 nike

我正在处理一个困难的数据集,因为这些类都高度不平衡且极不相关。该集合有 96,000 个值,其中 1s 不到 200 个。

我尝试了几种方法,每种方法的精度和准确度都很高,但是只有少数(少于5个)值被分类为1。我想知道是否有一种方法可以强制机器分类更多1秒。如果我能在 25% 的时间内正确分类,这将是一个很好的结果。

我尝试过使用随机森林的“类别权重”参数,但这似乎对结果没有任何影响。

import numpy as np
import pandas as pd
import sklearn as sklearn
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_pickle('/Users/shellyganga/Downloads/ola.pickle')

print(df.describe())

#filtering the df to improve results
df = df[(df['trip_duration'] > 5) & (df['Smooth_Driving_Score'] < 99)]

print(df.describe())


maxVal = 1
df.unsafe = df['unsafe'].where(df['unsafe'] <= maxVal, maxVal)

df.drop(df.columns[0], axis=1, inplace=True)
df.drop(df.columns[-2], axis=1, inplace=True)

#setting features and labels
labels = np.array(df['unsafe'])
features= df.drop('unsafe', axis = 1)

# Saving feature names for later use
feature_list = list(features.columns)

# Convert to numpy array
features = np.array(features)

from sklearn.model_selection import train_test_split

# 30% examples in test data
train, test, train_labels, test_labels = train_test_split(features, labels,
stratify = labels,
test_size = 0.4,
random_state = 12)

from sklearn.ensemble import RandomForestClassifier

# Create the model with 100 trees
model = RandomForestClassifier(n_estimators=100,
random_state=12,
max_features = 'sqrt',
n_jobs=-1, verbose = 1, class_weight={0:1, 1:1})

# Fit on training data
model.fit(train, train_labels)
predictions = model.predict(test)


print(np.mean(predictions))
print(predictions.shape)


from sklearn.metrics import classification_report
print(classification_report(test_labels, predictions)

输出:

     precision    recall  f1-score   support

0 1.00 1.00 1.00 38300
1 1.00 0.01 0.02 90

avg / total 1.00 1.00 1.00 38390

我尝试使用 {class_weight = 'balanced'} 并提供了不同的结果,但我无法理解它。

   micro avg       1.00      1.00      1.00     38390
macro avg 1.00 0.51 0.51 38390
weighted avg 1.00 1.00 1.00 38390

我如何知道它预测了多少阳性?

最佳答案

这种程度的不平衡通常很难解决,特别是如果你有很多特征(由于维数灾难)。除非两个类(Class)之间有非常明显的界限,否则很难区分少数类(Class)和绝大多数类(Class)。正如 Luke 和 Tacratis 所建议的,类权重和过采样/欠采样都是您应该尝试的好方法。此外,我还建议使用适当的成本指标。例如,如果误报比漏报更可取,请尝试最大化召回率,而不是精度或准确度。我还建议结合使用这些方法。那么,让我们说

  1. 将少数类过采样至 1000 行。在过采样时尝试 SMOTE。
  2. 对少数类进行欠采样至 5000-10000 行。
  3. 应用类别权重来创建平衡的集合。
  4. 评估测试集上的成本指标并更改上述数字,直到指标最大化。
综上所述,您完全有可能没有足够的少数群体样本来构建训练有素的模型。如果您能够在训练集上实现较高的成本指标值,但无法在测试集上推广该指标,就会出现这种情况。

关于python - 使用极其不平衡且相关性较差的数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53354123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com