我有两个看起来像这样的数据集:
DATASET 1
Training (Class 0: 8982, Class 1: 380)
Testing (Class 0: 574, Class 1: 12)
DATASET 2
Training (Class 0: 8982, Class 1: 380)
Testing (Class 0: 574, Class 1: 8)
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 Tensorflow 中构建一个深度前馈神经网络。我在 90 年代获得准确度,在 80 年代获得 AUC 分数。当然,数据集严重不平衡,因此这些指标毫无用处。我的重点是获得良好的召回值,我不想对第 1 类进行过采样。我一直在玩弄模型的复杂性,但无济于事,最好的模型只能正确预测 25% 的正类。
我的问题是,考虑到这些数据集的分布,在没有获得更多数据的情况下构建模型是徒劳的(我无法获得更多数据),还是有一种方法可以处理如此不平衡的数据。
谢谢!
我有一个看起来像这样的表:
A B
1 cat
1 cat
1 dog
2 illama
2 alpaca
3 donkey
Run Code Online (Sandbox Code Playgroud)
使用A作为键,我想删除重复项,使该数据帧变为:
A B
1 cat
3 donkey
Run Code Online (Sandbox Code Playgroud)
1重复三次,该值cat最多,因此记录.没有多数,2所以它被认为是模糊的并且完全被删除.3仍然没有重复.
我认为 Scikit 中多类的 f1_macro 将使用以下方法计算:
2 * Macro_precision * Macro_recall / (Macro_precision + Macro_recall)
Run Code Online (Sandbox Code Playgroud)
但手动检查显示并非如此,该值略高于 scikit 计算的值。我浏览了文档,但找不到公式。
例如,鸢尾花数据集产生以下结果:
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
from sklearn.model_selection import train_test_split
iris = datasets.load_iris()
data=pd.DataFrame({
'sepal length':iris.data[:,0],
'sepal width':iris.data[:,1],
'petal length':iris.data[:,2],
'petal width':iris.data[:,3],
'species':iris.target
})
X=data[['sepal length', 'sepal width', 'petal length', 'petal width']]
y=data['species']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
clf=RandomForestClassifier(n_estimators=100)
clf.fit(X_train,y_train)
y_pred=clf.predict(X_test)
#Compute metrics using scikit
from sklearn import metrics
print(metrics.confusion_matrix(y_test, y_pred))
print(metrics.classification_report(y_test, y_pred)) …Run Code Online (Sandbox Code Playgroud)