數(shù)據(jù)建难邮铮—流程

數(shù)據(jù)了解

1.數(shù)據(jù)讀取

open(), pd.read_csv(), datasets.load_iris()

注:原始數(shù)據(jù)的行娃磺、列標(biāo)題跌捆;分隔符徽职;其中使用datasets時運用load的話需要所需數(shù)據(jù)本來就存在其中

2.數(shù)據(jù)詳情

df.head(), df.tail(), df.columns, df.info(), df.shape(), df.columns.tolist()

主要在于了解數(shù)據(jù)長什么樣,有哪些字段佩厚,每個字段都是什么類型姆钉,針對不同類型的特征進行不同的數(shù)據(jù)轉(zhuǎn)換,進而得到可以用于建模的特征

4.數(shù)據(jù)標(biāo)注

df1['label'] = 1, df2['label'] = 0

標(biāo)注正負(fù)樣本,便于后期進行數(shù)據(jù)劃分后進行數(shù)據(jù)檢驗

數(shù)據(jù)清洗

1.飽和度統(tǒng)計

df['feature'].drop_duplicates().count()/df.shape(0)

主要在于查看每個特征的缺失情況潮瓶,選擇合適的方法進行數(shù)據(jù)填充陶冷,這里需要搞清楚當(dāng)特征缺失占比達(dá)到百分之多少的時候是不飽和的

2.缺失值處理

define function

針對不同的數(shù)據(jù)類型,通過自定義函數(shù)的方式毯辅,選擇不同的方法進行填充
a. 數(shù)值型
填充方法:0埂伦、均值、中位數(shù)思恐、眾數(shù)沾谜、上下條記錄、插值法壁袄、knn填充
b.布爾型
填充方法:缺失部分直接填充成False
c.有序離散型/連續(xù)型
填充方法:先數(shù)量化类早,再用數(shù)值填充
d.無序離散型
填充方法:轉(zhuǎn)換成布爾型,再用False填充

注:如果缺失值較多(可能70%以上都是缺失的)嗜逻,則可考慮去除特征(前提是通過計算特征重要性后發(fā)現(xiàn)這個特征不重要)或者追究數(shù)據(jù)源

3.異常值處理

import seaborn as sns

sns.boxplot(df[['feature']])

通過繪制每一個特征的箱線圖來判斷對應(yīng)特征的數(shù)據(jù)是否存在異常值
這里同樣的只需要繪制重要特征的箱線圖

  • 首先需要確認(rèn)數(shù)據(jù)是屬于噪聲還是異常值還是離群點涩僻,通常噪聲是測量過程中產(chǎn)生的隨機誤差、異常值一組測定值中與平均值的偏差超過兩倍標(biāo)準(zhǔn)差的測定值栈顷、離群點是一組數(shù)據(jù)中原理一般水平的極大值或極小值

  • 針對噪聲逆日,可不必進行任何處理;針對異常值萄凤,可采用分箱的方式室抽,每廂建立一個模型;離群點可以直接去掉

4.數(shù)據(jù)轉(zhuǎn)換

  • 結(jié)構(gòu)化數(shù)據(jù)

    結(jié)構(gòu)化數(shù)據(jù)可以看作關(guān)系型數(shù)據(jù)庫的一張表靡努,包含數(shù)值型和類別兩種基本類型坪圾;每一行數(shù)據(jù)表示一個樣本的信息
    可進行啞變量處理、序號編碼(Ordinal Encoding)

  • 非結(jié)構(gòu)化數(shù)據(jù)

    非結(jié)構(gòu)化數(shù)據(jù)主要是文本惑朦、圖像兽泄、音頻和視頻數(shù)據(jù),其包含的信息無法用一個簡單的數(shù)值表示漾月,也沒有清晰的定義病梢,數(shù)據(jù)大小互不相同
    可采取one-hot編碼進行處理

  • 特征工程中的數(shù)據(jù)類型

    數(shù)值型(可直接建模)
    枚舉(one-hot)
    日期型(day)
    無序離散型(比如手機品牌, bool)
    有序離散型(比如早中晚, one-hot)
    有序連續(xù)型(比如年齡段, on-hot)

針對數(shù)值較大的樣本,可進行相關(guān)函數(shù)轉(zhuǎn)換梁肿,比如:log

5.數(shù)據(jù)失衡

  • 特征量級傾斜

    擴充數(shù)據(jù)量
    重采樣

  • 正負(fù)樣本失衡

    人工生成數(shù)據(jù)樣本
    假設(shè)正樣本10w個蜓陌,負(fù)樣本90w個,則可進行以下兩種方式進行處理

    過采樣:相當(dāng)于把90w個負(fù)樣本劃分成9組吩蔑,分別和相同的10w個正樣本進行建模钮热,最后綜合9個模型來判斷模型的好壞
    欠采樣:相當(dāng)于從90w個負(fù)樣本中隨機抽樣10w個和正樣本建模
    **但是無論是過抽樣還是欠抽樣,均可能會產(chǎn)生過擬合的情況烛芬,故在建模過程中需要加上正則化隧期,比如:LR痴奏、RF、XGB

數(shù)據(jù)分析

1.對比分析

sns.distplot(df[['feature']])

a.針對已知的正負(fù)樣本繪制特征的概率密度圖厌秒,查看數(shù)據(jù)分布情況
正常情況而言,主觀上的顯著性特征在正負(fù)樣本上所呈現(xiàn)出來的數(shù)據(jù)規(guī)律是完全相反的擅憔,可以很明顯就區(qū)分兩個樣本
b.正負(fù)樣本聚合觀察
假設(shè)正樣本概率密度圖呈現(xiàn)正態(tài)分布圖樣式鸵闪,負(fù)樣本則呈現(xiàn)相反的正態(tài)分布圖樣式,則把正負(fù)樣本融合之后暑诸,得到的數(shù)據(jù)圖會不會比較平緩蚌讼?
雖然后期同樣要進行正負(fù)樣本合并,便于劃分?jǐn)?shù)據(jù)集个榕,但是這里相當(dāng)于要每個特征繪制三個概率密度圖篡石,后期會得到什么結(jié)論?對后期特征處理會有什么正向影響西采?

2.描述性統(tǒng)計分析

df.describe()

會得到每個特征對應(yīng)的常見統(tǒng)計值

3.相關(guān)性分析(?相當(dāng)于多重共線性)

sns.heatmap()

sns.pairplot()

繪制特征間的相關(guān)系數(shù)熱力圖凰萨,但是對于特征少的情況更適合畫圖,特征多的話可以直接計算相關(guān)系數(shù)矩陣
特征之間有強關(guān)系的話械馆,需要剔除么胖眷?

特征變換

1.特征降維

  • connection

    正常情況下針對特征很多的情況,會選擇使用PCA霹崎、LPA等方法選擇能解釋更多信息的特征來代替其他特征珊搀,但是這樣的效率會比較慢,同時也會導(dǎo)致數(shù)據(jù)信息丟失尾菇,所以考慮多個特征結(jié)合的方式進行降維

  • derivative

    由于多個特征聚合在一起境析,便會產(chǎn)生新的衍生特征,比如手機型號派诬、價格等可統(tǒng)一成一個phone_info特征

2.onehot編碼

from sklearn.preprocessing import OneHotEncoder

one_hot_encoder = OneHotEncoder(sparse=False, categories = 'auto')

one_hot_feas = pd.DataFrame(one_hot_encoder.fit_transform(data))

原因:
通常情況下計算特征之間相似性劳淆,需要計算彼此間的距離,如果非數(shù)值型不好計算千埃,所以需要進行onehotencoder編碼憔儿;如果本來就是離散型數(shù)值型變量,則直接計算彼此之間的距離就好了放可,或者直接進行歸一化處理
原理:
分類變量作為二進制向量的表示谒臼,首先將分類值映射到整數(shù)值,然后每個整數(shù)值表示為二進制向量
應(yīng)用:
離散無序的分類特征耀里,通常用于xgb蜈缤、gbdt;用在lr里面效果不好冯挎,因為lr要求特征之間相互獨立底哥;如果需要onehot的特征較多會造成非奇異矩陣的解不唯一

注意:需要在切分?jǐn)?shù)據(jù)之后

3.特征挑選

  • 基模型

現(xiàn)根據(jù)數(shù)據(jù)展現(xiàn)出來的特性選擇合適的模型、利用默認(rèn)參數(shù)建立一個基模型,需要計算對應(yīng)的score

  • 計算特征重要性

這個是在建立基模型之后么趾徽?這里可以挑選出優(yōu)質(zhì)的特征续滋,然后再進行建模?

數(shù)據(jù)建模

1.數(shù)據(jù)劃分

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(df, label, test_size=0.3, random_state=number)

使用訓(xùn)練集訓(xùn)練基模型和優(yōu)化模型孵奶,在只有訓(xùn)練集和測試集的情況下疲酌,比例為7:3,在還有驗證集的情況下了袁,比例為6:2:2
參數(shù)解釋:random_state為任意整數(shù)時朗恳,每次進行建模的數(shù)據(jù)都是一樣的,random_state為0時载绿,每次進行建模的數(shù)據(jù)都不一樣

2.模型選擇

  • 確定模型

    根據(jù)基模型的效果粥诫、數(shù)據(jù)量、特征個數(shù)崭庸、數(shù)據(jù)質(zhì)量選擇合適的模型
    a.二分類
    LR:可解決多重共線性問題怀浆、計算量小
    不適合高維度數(shù)據(jù)、易欠擬合冀自、非線性特征需要進行線性變換
    b.多分類
    KNN(x):可用于非線性分類揉稚、準(zhǔn)確度高
    ?不適用于樣本不平衡問題、計算量大
    DT/RF(x):適合處理有缺失數(shù)據(jù)的樣本熬粗、運行速度快
    易產(chǎn)生過擬合
    SVM(x):適用于小樣本搀玖、可解決高維度樣本
    很難處理非線性問題、對缺失值敏感驻呐、核函數(shù)(線性核灌诅、多項式核、RBF以及sigmoid核)難選擇
    XGB:精度高含末、計算過程中考慮了正則項猜拾、可進行缺失值處理
    GBDT:

  • 模型調(diào)用

sklearn.svm.SVC #需要加上核函數(shù)kernel='linear'/('poly', degree=3)

sklearn.LogisticRegression

sklearn.neighbors.KNeighborsClassifier

sklearn.Linear_model.LinearRegression

sklearn.cluster.KMeans(n_clusters=3)

sklearn.decomposition.PCA()

3.參數(shù)調(diào)整

  • GridSearchCV()

    網(wǎng)格搜索和交叉驗證
    網(wǎng)格搜索:搜索的是參數(shù),即在指定的參數(shù)范圍內(nèi)佣盒,按步長依次調(diào)整參數(shù)挎袜,利用調(diào)整的參數(shù)訓(xùn)練學(xué)習(xí)器,從所有的參數(shù)中找到在驗證集上精度最高的參數(shù)肥惭,這其實是一個循環(huán)和比較的過程
    GridSearchCV可以保證在指定的參數(shù)范圍內(nèi)找到精度最高的參數(shù)盯仪,但是這也是網(wǎng)格搜索的缺陷所在,它要求遍歷所有可能參數(shù)的組合蜜葱,在面對大數(shù)據(jù)集和多參數(shù)的情況下全景,非常耗時

  • RandomizedSearchCV()

    RandomizedSearchCV的使用方法其實是和GridSearchCV一致的,但它以隨機在參數(shù)空間中采樣的方式代替了GridSearchCV對于參數(shù)的網(wǎng)格搜索牵囤,在對于有連續(xù)變量的參數(shù)時爸黄,RandomizedSearchCV會將其當(dāng)作一個分布進行采樣這是網(wǎng)格搜索做不到的滞伟,它的搜索能力取決于設(shè)定的n_iter參數(shù)
    參數(shù)說明:
    clf:學(xué)習(xí)器,比如:clf = svm.SVC(kernel = 'linear')
    param_dist:參數(shù)搜索范圍
    param_dist = {
    'n_estimators':range(80,200,4),
    'max_depth':range(2,15,1),
    'learning_rate':np.linspace(0.01,2,20),
    'subsample':np.linspace(0.7,0.9,20),
    'colsample_bytree':np.linspace(0.5,0.98,10),
    'min_child_weight':range(1,9,1)
    }
    scoring:精度評價方式
    n_tier:訓(xùn)練次數(shù)(數(shù)值越大炕贵,獲得的參數(shù)精度越大梆奈,但是搜索時間越長)
    n_jobs:cpu選擇,通常默認(rèn)為1称开,表示使用1個cpu
    grid = RandomizedSearchCV(clf, param_dist, cv = 3, scoring = 'neg_log_loss', n_iter=300, n_jobs = -1)
    grid.fit(x_train, y_train)
    best_estimator = grid.best_estimator_ # 返回最優(yōu)的訓(xùn)練器
    print(grid.best_estimator) # 輸出最優(yōu)訓(xùn)練器的精度
    print(grid.best_scores_)

模型檢驗

混淆矩陣

相關(guān)鉴裹,正類 無關(guān),負(fù)類
被檢索到 TP FP
無關(guān)钥弯,負(fù)類 FN TN
  • 偽正類率(False positive rate,F(xiàn)PR督禽,F(xiàn)PR=FP/(FP+TN)):預(yù)測為正但實際為負(fù)的樣本占所有負(fù)例樣本的比例脆霎;
  • 真正類率(True positive rate,TPR狈惫,TPR=TP/(TP+FN)):預(yù)測為正且實際為正的樣本占所有正例樣本的比例睛蛛。

1.accuracy

  • 準(zhǔn)確率

metrics.accuracy_score()

預(yù)測正確的占比
accuracy = (TP + TN) / (TP +FP + FN + TN)

2.precision

  • 精確率

precision_score()

實際為正占預(yù)測為正的占比
precision = TP / (TP + FP)

3.recall

  • 召回率

recall_score()

正確預(yù)測為正占實際為正的占比
recall = TP / (TP + FN)

4.f1-score

  • H-mean值

f1_score()

算數(shù)平均數(shù)除以幾何平均數(shù)
f1 = 2TP / (2TP + FP + FN)

5.AUC-ROC

  • ROC曲線

    接收者操作特征曲線,是反映敏感性和特異性連續(xù)變量的綜合指標(biāo)胧谈,ROC曲線上每個點反映著對同一信號刺激的感受性
    橫軸:FPR
    縱軸:TPR
    真正的理想情況忆肾,TPR應(yīng)接近1,F(xiàn)PR接近0菱肖,ROC曲線越靠攏(0,1)點客冈,越偏離45度對角線越好

  • AUC

    ROC曲線下的面積,顯然這個面積的數(shù)值不會大于1稳强。又由于ROC曲線一般都處于y=x這條直線的上方场仲,所以AUC的取值范圍一般在0.5和1之間

模型優(yōu)化

  • 基于基模型的檢驗指標(biāo),找到影響過擬合/欠擬合的原因退疫,更新模型/參數(shù)渠缕,得到優(yōu)化后的模型
  • 調(diào)整參數(shù)【迭代次數(shù)30/50/80,學(xué)習(xí)率0.2褒繁,深度3/5/8】
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亦鳞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子棒坏,更是在濱河造成了極大的恐慌燕差,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俊抵,死亡現(xiàn)場離奇詭異谁不,居然都是意外死亡,警方通過查閱死者的電腦和手機徽诲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門刹帕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吵血,“玉大人,你說我怎么就攤上這事偷溺√8ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵挫掏,是天一觀的道長侦另。 經(jīng)常有香客問我,道長尉共,這世上最難降的妖魔是什么褒傅? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮袄友,結(jié)果婚禮上殿托,老公的妹妹穿的比我還像新娘。我一直安慰自己剧蚣,他們只是感情好支竹,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸠按,像睡著了一般礼搁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上目尖,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天馒吴,我揣著相機與錄音,去河邊找鬼瑟曲。 笑死募书,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的测蹲。 我是一名探鬼主播莹捡,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扣甲!你這毒婦竟也來了篮赢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤琉挖,失蹤者是張志新(化名)和其女友劉穎启泣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體示辈,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡寥茫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了矾麻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纱耻。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡芭梯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弄喘,到底是詐尸還是另有隱情玖喘,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布蘑志,位于F島的核電站累奈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏急但。R本人自食惡果不足惜澎媒,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望波桩。 院中可真熱鬧旱幼,春花似錦、人聲如沸突委。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匀油。三九已至,卻和暖如春勾笆,著一層夾襖步出監(jiān)牢的瞬間敌蚜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工窝爪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弛车,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓蒲每,卻偏偏與公主長得像纷跛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子邀杏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容