我正在处理一个困难的数据集,因为这些类既高度不平衡又极其不相关。该集合有96,000个值,其中不到200个是1s。
我尝试了几种方法,每种方法的精度和准确性始终很高,但是只有少数(小于5个)值被分类为1。我想知道是否有一种方法可以强制机器进行分类更多1s。如果我只能在25%的时间内正确分类,那将是一个很好的结果。
我尝试使用随机森林的“类权重”参数,但这似乎对结果没有任何影响。
SingingError
输出:
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'}
我怎么知道它预测了多少阳性?
答案 0 :(得分:0)
这种不平衡程度通常很难解决,特别是如果您具有很多功能(由于维数的诅咒)。除非两个阶级之间有非常明显的界限,否则将很难从压倒多数的阶级中识别出少数阶级。正如Luke和Tacratis所建议的那样,类权重和过采样/欠采样都是您应该尝试的好方法。另外,我还建议使用适当的成本指标。例如,如果假阳性比假阴性更可取,请尝试使查全率最大化,而不是准确性或准确性。我还建议结合使用这些方法。所以,假设
所有这些,对于一个训练有素的模型,您可能没有足够的少数派样本。如果您能够在训练集上实现较高的成本度量标准,但却无法在测试集上推广度量标准,那么情况就是如此。