用python做预测模型的好处_如何用Python在10分钟内建立一个预测模型
匿名用戶
1級(jí)
2017-01-01 回答
預(yù)測(cè)模型的分解過程
我總是集中于投入有質(zhì)量的時(shí)間在建模的初始階段,比如,假設(shè)生成、頭腦風(fēng)暴、討論或理解可能的結(jié)果范圍。所有這些活動(dòng)都有助于我解決問題,并最終讓我設(shè)計(jì)出更強(qiáng)大的商業(yè)解決方案。為什么你要在前面花費(fèi)這段時(shí)間,這有充分的理由:
你有足夠的時(shí)間投入并且你是無經(jīng)驗(yàn)的(這是有影響的)
你不帶有其它數(shù)據(jù)觀點(diǎn)或想法的偏見(我總是建議,在深入研究數(shù)據(jù)之前做假設(shè)生成)
在后面的階段,你會(huì)急于完成該項(xiàng)目而沒有能力投入有質(zhì)量的時(shí)間了。
這個(gè)階段需要投入高質(zhì)量時(shí)間,因此我沒有提及時(shí)間表,不過我建議你把它作為標(biāo)準(zhǔn)的做法。這有助于你建立建立更好地預(yù)測(cè)模型,在后面的階段的只需較少的迭代工作。讓我們來看看建立第一個(gè)模型的剩余階段的時(shí)間表:
數(shù)據(jù)描述性分析——50%的時(shí)間
數(shù)據(jù)預(yù)處理(缺失值和異常值修復(fù))——40%的時(shí)間
數(shù)據(jù)建模——4%的時(shí)間
性能預(yù)測(cè)——6%的時(shí)間
讓我們一步一步完成每個(gè)過程(每一步投入預(yù)測(cè)的時(shí)間):
階段1:描述性分析/數(shù)據(jù)探索
在我剛開始成為數(shù)據(jù)科學(xué)家的時(shí)候,數(shù)據(jù)探索占據(jù)了我大量的時(shí)間。不過,隨著時(shí)間的推移,我已經(jīng)把大量的數(shù)據(jù)操作自動(dòng)化了。由于數(shù)據(jù)準(zhǔn)備占據(jù)建立第一個(gè)模型工作量的50%,自動(dòng)化的好處是顯而易見的。
這是我們的第一個(gè)基準(zhǔn)模型,我們?nèi)サ羧魏翁卣髟O(shè)計(jì)。因此,描述分析所需的時(shí)間僅限于了解缺失值和直接可見的大的特征。在我的方法體系中,你將需要2分鐘來完成這一步(假設(shè),100000個(gè)觀測(cè)數(shù)據(jù)集)。
我的第一個(gè)模型執(zhí)行的操作:
確定ID,輸入特征和目標(biāo)特征
確定分類和數(shù)值特征
識(shí)別缺失值所在列
階段2:數(shù)據(jù)預(yù)處理(缺失值處理)
有許多方法可以解決這個(gè)問題。對(duì)于我們的第一個(gè)模型,我們將專注于智能和快速技術(shù)來建立第一個(gè)有效模型。
為缺失值創(chuàng)建假標(biāo)志:有用,有時(shí)缺失值本身就攜帶了大量的信息。
用均值、中位數(shù)或其它簡(jiǎn)單方法填補(bǔ)缺失值:均值和中位數(shù)填補(bǔ)都表現(xiàn)良好,大多數(shù)人喜歡用均值填補(bǔ)但是在有偏分布的情況下我建議使用中位數(shù)。其它智能的方法與均值和中位數(shù)填補(bǔ)類似,使用其它相關(guān)特征填補(bǔ)或建立模型。比如,在Titanic生存挑戰(zhàn)中,你可以使用乘客名字的稱呼,比如:“Mr.”, “Miss.”,”Mrs.”,”Master”,來填補(bǔ)年齡的缺失值,這對(duì)模型性能有很好的影響。
填補(bǔ)缺失的分類變量:創(chuàng)建一個(gè)新的等級(jí)來填補(bǔ)分類變量,讓所有的缺失值編碼為一個(gè)單一值比如,“New_Cat”,或者,你可以看看頻率組合,使用高頻率的分類變量來填補(bǔ)缺失值。
由于數(shù)據(jù)處理方法如此簡(jiǎn)單,你可以只需要3到4分鐘來處理數(shù)據(jù)。
階段3:數(shù)據(jù)建模
根據(jù)不同的業(yè)務(wù)問題,我推薦使用GBM或RandomForest技術(shù)的任意一種。這兩個(gè)技術(shù)可以極其有效地創(chuàng)建基準(zhǔn)解決方案。我已經(jīng)看到數(shù)據(jù)科學(xué)家通常把這兩個(gè)方法作為他們的第一個(gè)模型同時(shí)也作為最后一個(gè)模型。這最多用去4到5分鐘。
階段4:性能預(yù)測(cè)
有各種各樣的方法可以驗(yàn)證你的模型性能,我建議你將訓(xùn)練數(shù)據(jù)集劃分為訓(xùn)練集和驗(yàn)證集(理想的比例是70:30)并且在70%的訓(xùn)練數(shù)據(jù)集上建模。現(xiàn)在,使用30%的驗(yàn)證數(shù)據(jù)集進(jìn)行交叉驗(yàn)證并使用評(píng)價(jià)指標(biāo)進(jìn)行性能評(píng)估。最后需要1到2分鐘執(zhí)行和記錄結(jié)果。
本文的目的不是贏得比賽,而是建立我們自己的基準(zhǔn)。讓我們用python代碼來執(zhí)行上面的步驟,建立你的第一個(gè)有較高影響的模型。
讓我們開始付諸行動(dòng)
首先我假設(shè)你已經(jīng)做了所有的假設(shè)生成并且你擅長(zhǎng)使用python的基本數(shù)據(jù)科學(xué)操作。我用一個(gè)數(shù)據(jù)科學(xué)挑戰(zhàn)的例子來說明。讓我們看一下結(jié)構(gòu):
步驟1:導(dǎo)入所需的庫,讀取測(cè)試和訓(xùn)練數(shù)據(jù)集。
#導(dǎo)入pandas、numpy包,導(dǎo)入LabelEncoder、random、RandomForestClassifier、GradientBoostingClassifier函數(shù)
import pandas as pd
import numpy as np
fromsklearn.preprocessing import LabelEncoder
import random
fromsklearn.ensemble import RandomForestClassifier
from sklearn.ensembleimport GradientBoostingClassifier
#讀取訓(xùn)練、測(cè)試數(shù)據(jù)集
train=pd.read_csv('C:/Users/AnalyticsVidhya/Desktop/challenge/Train.csv')
test=pd.read_csv('C:/Users/AnalyticsVidhya/Desktop/challenge/Test.csv')
#創(chuàng)建訓(xùn)練、測(cè)試數(shù)據(jù)集標(biāo)志
train='Train'
test='Test'
fullData =pd.concat(,axis=0) #聯(lián)合訓(xùn)練、測(cè)試數(shù)據(jù)集
步驟2:該框架的第二步并不需要用到python,繼續(xù)下一步。
步驟3:查看數(shù)據(jù)集的列名或概要
fullData.columns # 顯示所有的列名稱
fullData.head(10) #顯示數(shù)據(jù)框的前10條記錄
fullData.describe() #你可以使用describe()函數(shù)查看數(shù)值域的概要
步驟4:確定a)ID變量 b)目標(biāo)變量 c)分類變量 d)數(shù)值變量 e)其他變量。
ID_col =
target_col =
cat_cols =
num_cols= list(set(list(fullData.columns))-set(cat_cols)-set(ID_col)-set(target_col)-set(data_col))
other_col= #為訓(xùn)練、測(cè)試數(shù)據(jù)集設(shè)置標(biāo)識(shí)符
步驟5:識(shí)別缺失值變量并創(chuàng)建標(biāo)志
fullData.isnull().any()#返回True或False,True意味著有缺失值而False相反
num_cat_cols = num_cols+cat_cols # 組合數(shù)值變量和分類變量
#為有缺失值的變量創(chuàng)建一個(gè)新的變量
# 對(duì)缺失值標(biāo)志為1,否則為0
for var in num_cat_cols:
if fullData.isnull().any()=True:
fullData=fullData.isnull()*1
步驟6:填補(bǔ)缺失值
#用均值填補(bǔ)數(shù)值缺失值
fullData = fullData.fillna(fullData.mean(),inplace=True)
#用-9999填補(bǔ)分類變量缺失值
fullData = fullData.fillna(value = -9999)
步驟7:創(chuàng)建分類變量的標(biāo)簽編碼器,將數(shù)據(jù)集分割成訓(xùn)練和測(cè)試集,進(jìn)一步,將訓(xùn)練數(shù)據(jù)集分割成訓(xùn)練集和測(cè)試集。
#創(chuàng)建分類特征的標(biāo)簽編碼器
for var in cat_cols:
number = LabelEncoder()
fullData = number.fit_transform(fullData.astype('str'))
#目標(biāo)變量也是分類變量,所以也用標(biāo)簽編碼器轉(zhuǎn)換
fullData = number.fit_transform(fullData.astype('str'))
train=fullData='Train']
test=fullData='Test']
train = np.random.uniform(0, 1, len(train)) <= .75
Train, Validate = train=True], train=False]
步驟8:將填補(bǔ)和虛假(缺失值標(biāo)志)變量傳遞到模型中,我使用隨機(jī)森林來預(yù)測(cè)類。
features=list(set(list(fullData.columns))-set(ID_col)-set(target_col)-set(other_col))
x_train = Train.values
y_train = Train.values
x_validate = Validate.values
y_validate = Validate.values
x_test=test.values
random.seed(100)
rf = RandomForestClassifier(n_estimators=1000)
rf.fit(x_train, y_train)
步驟9:檢查性能做出預(yù)測(cè)
status = rf.predict_proba(x_validate)
fpr, tpr, _ = roc_curve(y_validate, status)
roc_auc = auc(fpr, tpr)
print roc_auc
final_status = rf.predict_proba(x_test)
test=final_status
test.to_csv('C:/Users/Analytics Vidhya/Desktop/model_output.csv',columns=)
現(xiàn)在可以提交了!
總結(jié)
以上是生活随笔為你收集整理的用python做预测模型的好处_如何用Python在10分钟内建立一个预测模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器压力测试_魔兽世界怀旧服:美服18
- 下一篇: pycharm格式化代码快捷键_你写的