如果你只使用二进制分类,你应该小心选择flip_y。例如,如果您选择flip_y 为高,这意味着您几乎翻转了每个标签,从而使问题变得更容易! (保持一致性)
因此,在二元分类中,flip_y 确实是min(flip_y,1-flip_y),将其设置为 0.5 会使分类变得非常困难。
你可以做的另一件事:创建数据后,进行降维,使用PCA:
from sklearn.cross_validation import cross_val_score
from sklearn.datasets import make_classification
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression()
X, y = make_classification(n_samples=10000, n_informative=18,n_features=20, flip_y=0.15, random_state=217)
print cross_val_score(estimator=clf, X=X, y=y, scoring='accuracy', cv=4)
#prints [ 0.80287885 0.7904 0.796 0.78751501]
pca = PCA(n_components=10)
X = pca.fit_transform(X)
print cross_val_score(estimator=clf, X=X, y=y, scoring='accuracy', cv=4)
#prints [ 0.76409436 0.7684 0.7628 0.75830332]
您可以减少 n_components 以获得更差的结果,同时保留原始数量的特征:
pca = PCA(n_components=1)
X = pca.fit_transform(X)
X = np.concatenate((X, np.random.rand(X.shape[0],19)),axis=1) #concatenating random features
cross_val_score(estimator=clf, X=X, y=y, scoring='accuracy', cv=10)
print cross_val_score(estimator=clf, X=X, y=y, scoring='accuracy', cv=4)
#prints [ 0.5572 0.566 0.5552 0.5664]
获得低于 50% 的准确率是“困难的”——即使你采用随机向量,准确率的期望值仍然是 0.5:
X = np.random.rand(10000,20)
print np.average(cross_val_score(estimator=clf, X=X, y=y, scoring='accuracy', cv=100))
#prints 0.501489999
所以 55% 的准确率被认为是非常低的。