2018-12-25 python大作业

-- coding: utf-8 --

"""
Created on Sun Dec 23 01:10:07 2018

@author: NickyChu
"""

import numpy as np

import pandas as pd
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.linear_model import LogisticRegression as LR
from sklearn.linear_model import RandomizedLogisticRegression as RLR

In[121]:

df = pd.read_csv('Train.csv',header=None)#使用header选项让列名为从0开始的数列
df_new = pd.read_csv('Test.csv',header=None)
print(df.duplicated())#检查重复项
df = df.drop_duplicates()#清洗重复项
df

In[163]:

my_matrix = df
data_x=my_matrix.iloc[:,0:-1]
data_y=my_matrix.iloc[:,-1]

In[123]:

rlr = RLR() #建立随机逻辑回归模型,筛选变量
rlr.fit(data_x, data_y) #训练模型
array1 = rlr.get_support() #获取特征筛选结果,也可以通过.scores_方法获取各个特征的分数
score1 = rlr.scores_
score1

In[161]:

i = 1

for name in array1:

if name == True:

print("第{0}个特征值为有用特征值".format(i))

i = i+1

In[162]:

筛选特征值

data_x.columns = score1
df_new.columns = score1
todrop = [0]
try:
data_x.drop(todrop, inplace=True, axis=1)
df_new.drop(todrop, inplace=True, axis=1)
except:
print("No need to drop")
data_x
df_new

In[]

分组

from sklearn.cross_validation import train_test_split
from sklearn.metrics import confusion_matrix, classification_report, roc_curve, auc
from sklearn.grid_search import GridSearchCV

X1_train, X1_test, y1_train, y1_test = train_test_split(data_x,data_y,test_size=0.33)

组内预测

lr=LR(C = 1.5, penalty = 'l1',class_weight='balanced')#逻辑回归模型
lr.fit(X1_train,y1_train)#train组内模拟
print('逻辑回归模型训练结束')
print('模型的平均正确率:%s' % lr.score(X1_train,y1_train))#输出模型平均正确率(不准确)
print(lr.get_params)#输出相关信息
y1_pre_val = lr.predict(X1_test)#train组内的预测函数

输出报告

print("Classification report (training):\n {0}".format(classification_report(y1_test,y1_pre_val,target_names=["0","1"])))

让他去预测一下test组的

y_val_old = lr.predict(df_new)
print(lr.get_params)#输出相关信息

In[]

parameter tuning

运用穷尽网格搜索

from sklearn.grid_search import GridSearchCV
lr_clf_tuned = LR()

tuned_parameters=[{'penalty':['l1','l2'],
'C':[0.01,0.05,0.1,0.5,1,1.1,1.2,1.3,1.4,1.5,10],
'solver':['liblinear'],
'multi_class':['ovr']},
{'penalty':['l2'],
'C':[0.01,0.05,0.1,0.5,1,1.1,1.2,1.3,1.4,1.5,10],
'solver':['lbfgs'],
'multi_class':['ovr','multinomial']}]
lr_clf_params = {"penalty": ["l1", "l2"], "C": [1, 1.1,1.2,1.3,1.4,1.5, 1.7, 2] }
lr_clf_cv = GridSearchCV(lr_clf_tuned, tuned_parameters, cv=5)
lr_clf_cv.fit(X1_train,y1_train)
print(lr_clf_cv.best_params_)

In[]

from sklearn.ensemble import RandomForestClassifier
lr=LR( C = 10, multi_class='ovr', penalty = 'l1', solver='lbfgs')#逻辑回归模型
lr.fit(X1_train,y1_train)
print('逻辑回归模型训练结束')
print('模型的平均正确率:%s' % lr.score(X1_train,y1_train))
print(lr.get_params)
y1_pre_val = lr.predict(X1_test)#train组内的预测函数

输出报告

print("Classification report (training):\n {0}".format(classification_report(y1_test,y1_pre_val,target_names=["0","1"])))

让他去预测一下test组的

y_val_new = lr.predict(df_new)
print(lr.get_params)#输出相关信息

In[]

寻找最优Roc值

from sklearn.metrics import confusion_matrix, classification_report, roc_curve, auc
from sklearn.metrics import roc_auc_score
def FindtheC():
score = []
aucarr = []
Conclu = []
for i in range(1,100):

i = 64

    play = i/1000
    for j in range(1,100):

j = 67时 达到 0.699的AUC

        Canshu = j
        lr=LR(C = Canshu, multi_class='ovr', penalty = 'l2', solver='liblinear',class_weight={0: play, 1: 1-play})#逻辑回归模型
        lr.fit(X1_train,y1_train)
        print('逻辑回归模型训练结束')
        print('模型的平均正确率:%s' % lr.score(X1_train,y1_train))
        print(lr.get_params)
        y1_pre_test1 = lr.predict(X1_test)#预测函数
        auc1 = "ROC是{0}".format(roc_auc_score(y1_test, y1_pre_test1))
        print(auc1)
        aucarr.append(roc_auc_score(y1_test, y1_pre_test1))
        Conclu.append([auc1,Canshu])

print(max(aucarr))

In[]

pre_probs = lr.predict_log_proba(data_x)
print(pre_probs[:,1])
print(pre_probs[:,0])

In[]

from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LogisticRegression

参数调整

x_train = X1_train
y_train = y1_train
x_test = X1_test
y_test = y1_test

def show_accuracy(a, b, tip):
acc = a.ravel() == b.ravel()
acc_rate = 100 * float(acc.sum()) / a.size
return acc_rate

Maincode

lr = LogisticRegression(penalty='l2')
lr.fit(x_train, y_train)
y_hat = lr.predict(x_test)
lr_rate = show_accuracy(y_hat, y_test, 'Logistic回归 ')
print(roc_auc_score(y_test, y_hat))

随机森林 n_estimators:决策树的个数,越多越好,不过值越大,性能就会越差,至少100

rfc = RandomForestClassifier(n_estimators=100)
rfc.fit(x_train, y_train)
y_hat = rfc.predict(x_test)
rfc_rate = show_accuracy(y_hat, y_test, '随机森林 ')
print(roc_auc_score(y_test, y_hat))

In[]

XGBoost

import xgboost as xgb

data_train = xgb.DMatrix(x_train, label=y_train)
data_test = xgb.DMatrix(x_test, label=y_test)
watch_list = [(data_test, 'eval'), (data_train, 'train')]
param = {'max_depth': 6, 'eta': 0.8, 'silent': 1, 'objective': 'binary:logistic'}
bst = xgb.train(param, data_train, num_boost_round=100, evals=watch_list)
y_hat = bst.predict(data_test)
y_hat[y_hat > 0.5] = 1
y_hat[~(y_hat > 0.5)] = 0
xgb_rate = show_accuracy(y_hat, y_test, 'XGBoost ')
print(roc_auc_score(y_test, y_hat))

In[]

ROC图所需参数

y1 = lr.predict_proba(data_x)
y1_valid_score_lr1 = lr.predict_proba(data_x)
fpr_lr1, tpr_lr1, thresholds_lr1 = roc_curve(data_y, y1_valid_score_lr1[:, 1])
roc_auc_lr1 = auc(fpr_lr1, tpr_lr1)

作ROC图

plt.plot(fpr_lr1, tpr_lr1, lw=2, alpha=.6)
plt.plot([0, 1], [0, 1], lw=2, linestyle="--")
plt.xlim([0, 1])
plt.ylim([0, 1.05])
plt.xlabel("FPR")
plt.ylabel("TPR")
plt.title("ROC curve")

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容