python+分类算法

分类算法: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




你可能感兴趣的:(python,算法,python,随机森林,逻辑回归,GBDT,AdaBoost)