Python Train_出乎意料的简单!10分钟用python建立人工智能预测模型
介紹
鑒于Python在過去幾年中的興起及其簡潔性,對于數據科學領域的Python學家意義重大。這篇文章會用最容易的方式引導你更快地構建第一個預測模型。
出乎意料的簡單!10分鐘用python進行人工智能建立預測模型
揭秘預測建模的過程
我一直專注于在模型構建的初始階段投入質量時間,如假設生成/腦力激蕩會議/討論或理解領域。所有這些活動都幫助我解決問題,最終導致我設計出更強大的業務解決方案。有充分理由說明你應該事先花時間:
1. 你有足夠的時間進行投資而且你很新鮮(它有影響力)
2. 您不會對其他數據點或想法產生偏見(我總是建議,在深入挖掘數據之前進行假設生成)
3. 在稍后階段,您將急于完成項目并且無法花費高質量的時間
這個階段需要一個高質量的時間,所以我不在這里提及時間表,我建議你把它作為標準做法。它將幫助您構建更好的預測模型,從而減少后期工作的迭代次數。讓我們看看第一個模型構建中的剩余階段和時間軸:
讓我們看看第一個模型構建中的剩余階段和時間軸
1. 對數據的描述性分析 - 50%的時間
2. 數據處理(缺失值和異常值修復) - 40%的時間
3. 數據建模 - 4%的時間
4. 性能評估 - 6%的時間
PS這是僅用于第一個模型構建的時間的分割
讓我們一步一步地完成這個過程(估算每個步驟花費的時間):
第1階段:描述性分析/數據探索:
作為數據科學家的最初幾天,數據探索過去常常花費很多時間。隨著時間的推移,已經對數據進行了大量自動化操作。鑒于數據準備占據了構建第一個模型的50%的工作,自動化的好處是顯而易見的。可以查看" 7個數據探索步驟 "來查看最常見的數據探索操作。
Tavish在他的文章中已經提到,隨著先進的機器學習工具的競爭,執行此任務所花費的時間已經大大減少。由于這是我們的第一個基準模型,我們不再使用任何類型的特征工程。因此,您可能需要進行描述性分析的時間僅限于知道缺失值和直接可見的大特征。在我的方法中,您需要2分鐘才能完成此步驟(假設,數據集中有100,000個觀察值)。
我為我的第一個模型執行的操作包括:
1. 識別ID,輸入和目標功能
2. 識別分類和數字特征
3. 識別缺少值的列
第2階段:數據處理(缺失值處理):
有各種方法來處理它。對于我們的第一個模型,我們將專注于智能和快速的技術來構建您的第一個有效模型(這些已經由Tavish在他的文章中討論,我添加了一些方法)
· 為缺失值創建虛擬標志:它有效,有時缺失值本身帶有大量信息。
· 使用均值/中位數/任何其他最簡單的方法估算缺失值:平均值和中位數估算表現良好,大多數人更喜歡用平均值進行估算,但如果分布偏差,我建議您使用中位數。其他智能方法通過使用其他相關特征或構建模型的類似案例均值和中值插補來估算值。例如:在泰坦尼克號的生存挑戰中,您可以使用乘客稱呼來估算Age的缺失值,如"Mr.","Miss。","Mrs。","Master"等,這對模型性能有很好的影響。
· 估算分類變量的缺失值:創建一個新級別來歸類分類變量,以便將所有缺失值編碼為單個值,例如"New_Cat",或者您可以查看頻率組合并使用具有更高頻率的值來估算缺失值。
使用這種簡單的數據處理方法,您可以將處理數據的時間縮短到3-4分鐘。
階段3.
數據建模
:
建議使用任何一種 GBM / 隨機森林技術,具體取決于業務問題。這兩種技術對于創建基準解決方案非常有效。我見過數據科學家經常使用這兩種方法作為他們的第一個模型,在某些情況下,它也可以作為最終模型。這將花費最長的時間(約4-5分鐘)。
第4階段。業績估算:
有多種方法可以驗證您的模型性能,我建議您將您的列車數據集劃分為Train并驗證(理想情況下為70:30)并根據70%的列車數據集構建模型。現在,使用30%的驗證數據集對其進行交叉驗證,并使用評估指標評估性能。這最終需要1-2分鐘來執行和記錄。
本文的目的不是為了贏得競爭,而是為自己建立一個基準。讓我們看一下python代碼來執行上述步驟,并構建您的第一個具有更高影響力的模型。
讓我們開始付諸行動
我假設你已經完成了所有的假設生成,并且你對使用python的基礎數據科學很好。我用數據科學挑戰的例子來說明這一點。讓我們來看看結構:
第1步:導入所需的庫并讀取測試和訓練數據集。附加兩者。
import pandas as pdimport numpy as npfrom sklearn.preprocessing import LabelEncoderimport randomfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.ensemble import GradientBoostingClassifiertrain=pd.read_csv('C:/Users/Analytics Vidhya/Desktop/challenge/Train.csv')test=pd.read_csv('C:/Users/Analytics Vidhya/Desktop/challenge/Test.csv')train['Type']='Train' #Create a flag for Train and Test Data settest['Type']='Test'fullData = pd.concat([train,test],axis=0) #Combined both Train and Test Data set第2步:Python中不需要框架的第2步。到下一步。
第3步:查看數據集的列名稱/摘要
fullData.columns # This will show all the column namesfullData.head(10) # Show first 10 records of dataframefullData.describe() #You can look at summary of numerical fields by using describe() function步驟4:識別a)ID變量b)目標變量c)分類變量d)數值變量e)其他變量
ID_col = ['REF_NO']target_col = ["Account.Status"]cat_cols = ['children','age_band','status','occupation','occupation_partner','home_status','family_income','self_employed', 'self_employed_partner','year_last_moved','TVarea','post_code','post_area','gender','region']num_cols= list(set(list(fullData.columns))-set(cat_cols)-set(ID_col)-set(target_col)-set(data_col))other_col=['Type'] #Test and Train Data set identifier步驟5:識別具有缺失值的變量并為這些變量創建標志
fullData.isnull().any()#Will return the feature with True or False,True means have missing value else False
num_cat_cols = num_cols+cat_cols # Combined numerical and Categorical variables
#Create a new variable for each variable having missing value with VariableName_NA
# and flag missing value with 1 and other with 0
for var in num_cat_cols:
if fullData[var].isnull().any()==True:
fullData[var+'_NA']=fullData[var].isnull()*1
第6步:估算缺失值
#Impute numerical missing values with meanfullData[num_cols] = fullData[num_cols].fillna(fullData[num_cols].mean(),inplace=True)#Impute categorical missing values with -9999fullData[cat_cols] = fullData[cat_cols].fillna(value = -9999)步驟7:為分類變量創建標簽編碼器并將數據集拆分為訓練和測試,進一步將列車數據集拆分為訓練和驗證
#create label encoders for categorical featuresfor var in cat_cols: number = LabelEncoder() fullData[var] = number.fit_transform(fullData[var].astype('str'))#Target variable is also a categorical so convert itfullData["Account.Status"] = number.fit_transform(fullData["Account.Status"].astype('str'))train=fullData[fullData['Type']=='Train']test=fullData[fullData['Type']=='Test']train['is_train'] = np.random.uniform(0, 1, len(train)) <= .75Train, Validate = train[train['is_train']==True], train[train['is_train']==False]步驟8 :將插補和虛擬(缺失值標志)變量傳遞到建模過程。我正在使用隨機森林預測班級
features=list(set(list(fullData.columns))-set(ID_col)-set(target_col)-set(other_col))x_train = Train[list(features)].valuesy_train = Train["Account.Status"].valuesx_validate = Validate[list(features)].valuesy_validate = Validate["Account.Status"].valuesx_test=test[list(features)].valuesrandom.seed(100)rf = RandomForestClassifier(n_estimators=1000)rf.fit(x_train, y_train)第9步 :檢查性能并進行預測
status = rf.predict_proba(x_validate)fpr, tpr, _ = roc_curve(y_validate, status[:,1])roc_auc = auc(fpr, tpr)print roc_aucfinal_status = rf.predict_proba(x_test)test["Account.Status"]=final_status[:,1]test.to_csv('C:/Users/Analytics Vidhya/Desktop/model_output.csv',columns=['REF_NO','Account.Status'])并提交!
結束筆記
希望這篇文章能讓您開始編寫自己的10分鐘代碼。Kaggle的大多數大師也是這么起步的。有問題和資料關注公眾號“python_dada"。
總結
以上是生活随笔為你收集整理的Python Train_出乎意料的简单!10分钟用python建立人工智能预测模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用Linux写c程序并编译运行
- 下一篇: 数据库mysql中delimiter的作