python统计分析--4.Logistic回归
生活随笔
收集整理的這篇文章主要介紹了
python统计分析--4.Logistic回归
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 0.Logistic模型簡介
- 1. python數據處理標準流程
- 2. 混淆矩陣與預測
- 3. 交叉驗證
- 4. 網格搜索
- 5. pipeline管道
0.Logistic模型簡介
logistic回歸又稱logistic回歸分析,是一種廣義的線性回歸分析模型,常用于數據挖掘,疾病自動診斷,經濟預測等領域。例如,探討引發疾病的危險因素,并根據危險因素預測疾病發生的概率等。以胃癌病情分析為例,選擇兩組人群,一組是胃癌組,一組是非胃癌組,兩組人群必定具有不同的體征與生活方式等。因此因變量就為是否胃癌,值為“是”或“否”,自變量就可以包括很多了,如年齡、性別、飲食習慣、幽門螺桿菌感染等。自變量既可以是連續的,也可以是分類的。然后通過logistic回歸分析,可以得到自變量的權重,從而可以大致了解到底哪些因素是胃癌的危險因素。同時根據該權值可以根據危險因素預測一個人患癌癥的可能性。
- 概念
logistic回歸是一種廣義線性回歸(generalized linear model,GLM),因此與多重線性回歸分析有很多相同之處。它們的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求參數,其區別在于他們的因變量不同,多重線性回歸直接將w‘x+b作為因變量,即y =w‘x+b,而logistic回歸則通過函數L將w‘x+b對應一個隱狀態p,p =L(w‘x+b),然后根據p 與1-p的大小決定因變量的值。如果L是logistic函數,就是logistic回歸,如果L是多項式函數就是多項式回歸。
logistic回歸的因變量可以是二分類的,也可以是多分類的,但是二分類的更為常用,也更加容易解釋,多類可以使用softmax方法進行處理。實際中最為常用的就是二分類的logistic回歸。 - Logistic回歸模型的適用條件
- 原理:
如果直接將線性回歸的模型扣到Logistic回歸中,會造成方程二邊取值區間不同和普遍的非直線關系。因為Logistic中因變量為二分類變量,某個概率作為方程的因變量估計值取值范圍為0-1,但是,方程右邊取值范圍是無窮大或者無窮小。所以,才引入Logistic回歸。 - Logistic回歸實質:
發生概率除以沒有發生概率再取對數。就是這個不太繁瑣的變換改變了取值區間的矛盾和因變量自變量間的曲線關系。究其原因,是發生和未發生的概率成為了比值 ,這個比值就是一個緩沖,將取值范圍擴大,再進行對數變換,整個因變量改變。不僅如此,這種變換往往使得因變量和自變量之間呈線性關系,這是根據大量實踐而總結。所以,Logistic回歸從根本上解決因變量要不是連續變量怎么辦的問題。還有,Logistic應用廣泛的原因是許多現實問題跟它的模型吻合。例如一件事情是否發生跟其他數值型自變量的關系。 - 注意:
如果自變量為字符型,就需要進行重新編碼。一般如果自變量有三個水平就非常難對付,所以,如果自變量有更多水平就太復雜。這里只討論自變量只有三個水平。非常麻煩,需要再設二個新變量。共有三個變量,第一個變量編碼1為高水平,其他水平為0。第二個變量編碼1為中間水平,0為其他水平。第三個變量,所有水平都為0。實在是麻煩,而且不容易理解。最好不要這樣做,也就是,最好自變量都為連續變量。 - python代碼如下
1. python數據處理標準流程
第一、導入包和對應的類
第二、實例化
第三、擬合數據
第四、評估模型
第五、預測評分
2. 混淆矩陣與預測
#-----------混淆矩陣與預測----------- #(1)預測分類 import seaborn as sns import matplotlib.pyplot as plt from sklearn.metrics import confusion_matrix from sklearn.metrics import classification_report import mglearn # mglearn.plots.plot_binary_confusion_matrix()cm=confusion_matrix(ytest,y_log) print(classification_report(ytest,y_log,target_names=['非違約','違約'])) sns.heatmap(cm,fmt="d",cmap="gist_rainbow",annot=True,center=True)#annot將數值顯示在單元格里
3. 交叉驗證
交叉驗證適合支持向量機(SVM)和決策樹算法,其他也能用,用的比較少
4. 網格搜索
#-----------#6.網格搜索----------- from sklearn.model_selection import GridSearchCV#GridSearchCV網格搜索 parameters={'solver':['newton-cg','lbfgs', 'liblinear','sag','saga'],#'penalty':['l2','l1'],#l2嶺回歸,l1為lasso,強調可解釋'C':[0.3,1,2] # 可以設置范圍*range(0,10) } #線性回歸中叫algha系數,logistic和svm叫C。懲罰系數的倒數,值越小,正則化越大(懲罰越大),修正過擬合,共線性 grid_search=GridSearchCV(log,parameters,cv=3,n_jobs=-1)#scoring='accuracy' grid_search.fit(xtrain,ytrain) print("最優得分:%s" %grid_search.best_score_) print("測試得分:%s" %grid_search.score(xtest,ytest)) print("全部及最優系數:%s" %grid_search.best_estimator_) print("定義搜索的最優系數:%s" %grid_search.best_params_)#最后使用最優系數構建模型 model=grid_search.best_estimator_ ypre=model.fit(xtrain,ytrain).predict_proba(xtrain)#預測概率 ypre[:6]5. pipeline管道
#==============7.pipeline管道============= #Pipeline需要命名;make_pipeline不需要命名 import sklearn.neighbors._base import sys sys.modules['sklearn.neighbors.base'] = sklearn.neighbors._base #----------------標準管道--------------------------- #分類器前的預分析:特征提取(主成分)、特征選擇(變量選擇)、縮放(各種變量變換)、分類(聚類)、缺失值 from sklearn.pipeline import Pipeline from sklearn.preprocessing import * #預處理 from sklearn.feature_selection import SelectFromModel #篩選 from sklearn.svm import LinearSVC from sklearn.ensemble import RandomForestClassifier from missingpy import MissForestpipe = Pipeline([ ("缺失值1",MissForest(n_estimators=2,min_samples_leaf=9000)),#隨機森林("規范化2",MinMaxScaler(feature_range=(0,1))),#最小值與最大值轉化("特征選擇3",SelectFromModel(LinearSVC(penalty="l2",random_state=0),max_features=3)),#從模型找出最好的3個變量("模型4",RandomForestClassifier(oob_score=True,random_state=0))#隨機森林分類器]) rf_clf=pipe.fit(xtrain,ytrain)#rf是隨機森林縮寫,clf是分類print('缺失值統計量:',pipe.named_steps['缺失值1'].statistics_) print('變量變換:',pipe.named_steps['規范化2'].data_range_) print('特征選擇:',pipe.named_steps['特征選擇3'].get_support())#篩選標記 print('構建模型:',pipe.named_steps['模型4'].feature_importances_)#變量重要性 print('模型評分:',pipe.score(xtest,ytest))#主要使用測試集評分#----------------管道與網格搜索、交叉驗證--------------------------- from sklearn.model_selection import GridSearchCV#定義數據流 pipe_gc = Pipeline([ ("缺失值1",MissForest(n_estimators=2,min_samples_leaf=9000)),("規范化2",MinMaxScaler(feature_range=(0,1))),("特征選擇3",SelectFromModel(LinearSVC())),("模型4",RandomForestClassifier())])#定義參數:主要參數名需要加步驟的標簽 # param_p=[{'特征選擇3__max_features':[2,4,6]}, # {'模型4__min_samples_leaf':[1000,2000,5000], # '模型4__n_estimators':[2,5,6]} # ]# grid_search_p=GridSearchCV(estimator=pipe_gc,param_grid=param_p,cv=2,n_jobs=-1) # grid_search_p.fit(xtrain,ytrain) # print("測試得分:%s" %grid_search_p.score(xtest,ytest)) # print("全部及最優系數:%s" %grid_search_p.best_estimator_) # print("定義搜索的最優系數:%s" %grid_search_p.best_params_)總結
以上是生活随笔為你收集整理的python统计分析--4.Logistic回归的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python统计分析--3.线性回归四种
- 下一篇: Python统计分析--- 5.统计法与