python+分類演算法
阿新 • • 發佈:2019-01-03
分類演算法:LR/RF/GBDT/ADABOOST
python包:sklearn
結果:# -*- coding: utf-8 -*- """ Created on Wed May 9 10:37:12 2018 比較不同分類演算法效果 分類演算法:LR/RF/GBDT/ADABOOST @author: DELL """ from sklearn.linear_model import LogisticRegression from sklearn.ensemble import GradientBoostingClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import AdaBoostClassifier import pandas as pd import numpy as np # 讀入資料,資料格式為 user,feature,pv,label data = pd.read_csv('E:\\creditCard\\rf_data\\train_500.csv') # 正樣本資料 data1 = pd.read_csv('E:\\creditCard\\rf_data\\train_1w.csv') # 負樣本資料 data = data.append(data1) # 合併 # 整理資料,將資料整理成 使用者-特徵 矩陣 grp=data.groupby(['user','feature']) grp_1 = grp.agg(np.sum) # pv 累加 grp_2 = grp_1.reset_index() # 重置行索引 grp_3 = grp_2.pivot_table(index='user',columns='feature',values='pv') # 以使用者為行索引,特徵為列索引,pv為矩陣內容 grp_4 = grp_3.fillna(0) # 將na替換成0 # 獲取所有特徵名稱 features = grp_4.columns # 將資料整理成 使用者-標籤 矩陣 user_label_1 = data[['user','label']].groupby(['user']).agg('max') # 標籤為"y"或"n",當用戶分組後,取較大值作為標籤 # 將標籤列加入 使用者-特徵 矩陣 grp_4['label'] = user_label_1['label'] # 劃分訓練集和測試集,隨機劃分,75%為訓練集 grp_4['is_train'] = np.random.uniform(0,1,len(grp_4)) <=0.75 # 生成0-1的隨機數,按0.75劃分 train,test = grp_4[grp_4['is_train']==True],grp_4[grp_4['is_train']==False] # 拆分測試集和訓練集 # 邏輯迴歸 lr = LogisticRegression(random_state=10) lr.fit(train[features],train['label']) # 訓練模型 label_predict1 = lr.predict(test[features]) # 預測測試集分類 result1 = pd.crosstab(test['label'],label_predict1) # 生成真實標籤-預測標籤矩陣 print("lr") print(result1) print("") # 隨機森林 clf = RandomForestClassifier(n_jobs=2,n_estimators=10) clf.fit(train[features],train['label']) label_predict2 = clf.predict(test[features]) result2 = pd.crosstab(test['label'],label_predict2) print("randomforst") print(result2) print("") # GBDT gbc = GradientBoostingClassifier(random_state=10) gbc.fit(train[features],train['label']) label_predict3 = gbc.predict(test[features]) result3 = pd.crosstab(test['label'],label_predict3) print("gbdt") print(result3) print("") # adaboost abc = AdaBoostClassifier() abc.fit(train[features],train['label']) label_predict4 = abc.predict(test[features]) result4 = pd.crosstab(test['label'],label_predict4) print("adaboost") print(result4) # 將 分類錯誤的負樣本使用者 輸出到檔案 f = open('E:\\creditCard\\rf_data\\user2\\user_nf.csv','w'); test["pre"]=label_predictpreusers=test[(test["pre"]=='y')&(test['label']=='n')] for i in preusers.index: f.write(i+"\n") f.close(); print("finished!!!")
runfile('D:/pythonspace/randomForst/lr_userfilter.py', wdir='D:/pythonspace/randomForst')
lr
col_0 n y
label
n 13280 20
y 66 94
randomforst
col_0 n y
label
n 13292 8
y 56 104
gbdt
col_0 n y
label
n 13285 15
y 57 103
adaboost
col_0 n y
label
n 13284 16
y 57 103