數(shù)據(jù)不平衡以及危害
批發(fā)和零售業(yè) 118307
租賃和商務(wù)服務(wù)業(yè) 53294
制造業(yè) 49937
農(nóng)晦闰、林、牧仁热、漁業(yè) 48816
建筑業(yè) 33034
信息傳輸赊豌、軟件和信息技術(shù)服務(wù)業(yè) 17388
交通運輸蜀涨、倉儲和郵政業(yè) 15048
房地產(chǎn)業(yè) 12991
科學(xué)研究和技術(shù)服務(wù)業(yè) 9150
居民服務(wù)巧颈、修理和其他服務(wù)業(yè) 8052
金融業(yè) 7626
住宿和餐飲業(yè) 4390
文化闷祥、體育和娛樂業(yè) 4251
電力盛霎、熱力污朽、燃氣及水生產(chǎn)和供應(yīng)業(yè) 2943
水利散吵、環(huán)境和公共設(shè)施管理業(yè) 2235
采礦業(yè) 1694
教育 1390
衛(wèi)生和社會工作 488
以‘衛(wèi)生和社會工作’為正樣本,與其他負樣本比例懸殊,最終模型score對該類分類能力不足矾睦。
因此數(shù)據(jù)不平衡在分類問題中尤其值得關(guān)注晦款,不平衡的數(shù)據(jù)集分布使得模型擬合能力不足。
不均衡問題的解決思路以及代碼
- 采樣---包括過采樣(其中以SMOTE較為出色)和欠采樣枚冗;又稱上采樣與負采樣
- 加權(quán)---讓小樣本類別權(quán)重增加缓溅,提升小樣本類別的‘話語權(quán)’
- 集成方法---隨機森林
- 特征選擇---特征工程在特征表達或抽取后,特征選擇也可看做特征降維的一部分
采樣
上采樣(過采樣)赁温,其實就是以最多量的類為基準(zhǔn)坛怪,復(fù)制放大其他類數(shù)據(jù)達到平衡
缺點:數(shù)據(jù)單一、過擬合
優(yōu)化:SMOTE算法股囊,實際是利用已有樣本KNN隨機合成小樣本數(shù)據(jù)袜匿,達到數(shù)據(jù)平衡。
代碼:
from imblearn.over_sampling import SMOTE
sm = SMOTE(random_state=42)
X_sample, y_sample = sm.fit_sample(datas['feature'], datas['label'])
下采樣稚疹,也就是以最小量的類數(shù)據(jù)為準(zhǔn)居灯,舍棄縮小其他類部分數(shù)據(jù)
缺點:可能丟失重要特征
代碼:
>>> from collections import Counter
>>> from sklearn.datasets import make_classification
>>> from imblearn.under_sampling import RandomUnderSampler # doctest: +NORMALIZE_WHITESPACE
>>> X, y = make_classification(n_classes=2, class_sep=2,
... weights=[0.1, 0.9], n_informative=3, n_redundant=1, flip_y=0,
... n_features=20, n_clusters_per_class=1, n_samples=1000, random_state=10)
>>> print('Original dataset shape %s' % Counter(y))
Original dataset shape Counter({1: 900, 0: 100})
>>> rus = RandomUnderSampler(random_state=42)
>>> X_res, y_res = rus.fit_resample(X, y)
>>> print('Resampled dataset shape %s' % Counter(y_res))
Resampled dataset shape Counter({0: 100, 1: 100})
加權(quán)
from sklearn.svm import SVC
model_svm=SVC(class_weight='balanced')
model_svm.fit(x,y)
思路:對于分類中不同樣本數(shù)量的類別分別賦予不同的權(quán)重,一般是小樣本量類別權(quán)重高内狗,大樣本量類別權(quán)重低怪嫌。
特征選擇
特征較多的時候,特征選擇作為特征降維的一種方法其屏。
from sklearn.feature_selection import SelectKBest, SelectPercentile
from sklearn.feature_selection import f_classif, chi2, mutual_info_classif
from sklearn.svm import LinearSVC
from sklearn.feature_selection import RFE
estimator = LinearSVC()
sp = RFE(estimator=estimator)
# sp = SelectPercentile(mutual_info_classif, percentile=10)
# 得到返回至少含有10%特征信息的特征
X_result = sp.fit_transform(X, industry)
參考:
http://www.reibang.com/p/76dce1fca85b
https://blog.csdn.net/weixin_42243942/article/details/80480313