日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python统计分析--4.Logistic回归

發(fā)布時間:2023/12/15 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python统计分析--4.Logistic回归 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 0.Logistic模型簡介
  • 1. python數據處理標準流程
  • 2. 混淆矩陣與預測
  • 3. 交叉驗證
  • 4. 網格搜索
  • 5. pipeline管道

0.Logistic模型簡介

logistic回歸又稱logistic回歸分析,是一種廣義的線性回歸分析模型,常用于數據挖掘,疾病自動診斷,經濟預測等領域。例如,探討引發(fā)疾病的危險因素,并根據危險因素預測疾病發(fā)生的概率等。以胃癌病情分析為例,選擇兩組人群,一組是胃癌組,一組是非胃癌組,兩組人群必定具有不同的體征與生活方式等。因此因變量就為是否胃癌,值為“是”或“否”,自變量就可以包括很多了,如年齡、性別、飲食習慣、幽門螺桿菌感染等。自變量既可以是連續(xù)的,也可以是分類的。然后通過logistic回歸分析,可以得到自變量的權重,從而可以大致了解到底哪些因素是胃癌的危險因素。同時根據該權值可以根據危險因素預測一個人患癌癥的可能性。

  • 概念
    logistic回歸是一種廣義線性回歸(generalized linear model,GLM),因此與多重線性回歸分析有很多相同之處。它們的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求參數,其區(qū)別在于他們的因變量不同,多重線性回歸直接將w‘x+b作為因變量,即y =w‘x+b,而logistic回歸則通過函數L將w‘x+b對應一個隱狀態(tài)p,p =L(w‘x+b),然后根據p 與1-p的大小決定因變量的值。如果L是logistic函數,就是logistic回歸,如果L是多項式函數就是多項式回歸。
    logistic回歸的因變量可以是二分類的,也可以是多分類的,但是二分類的更為常用,也更加容易解釋,多類可以使用softmax方法進行處理。實際中最為常用的就是二分類的logistic回歸。
  • Logistic回歸模型的適用條件
  • 因變量為二分類的分類變量或某事件的發(fā)生率,并且是數值型變量。但是需要注意,重復計數現象指標不適用于Logistic回歸。
  • 殘差和因變量都要服從二項分布。二項分布對應的是分類變量,所以不是正態(tài)分布,進而不是用最小二乘法,而是最大似然法來解決方程估計和檢驗問題。
  • 自變量和Logistic概率是線性關系
  • 各觀測對象間相互獨立。
    • 原理:
      如果直接將線性回歸的模型扣到Logistic回歸中,會造成方程二邊取值區(qū)間不同和普遍的非直線關系。因為Logistic中因變量為二分類變量,某個概率作為方程的因變量估計值取值范圍為0-1,但是,方程右邊取值范圍是無窮大或者無窮小。所以,才引入Logistic回歸。
    • Logistic回歸實質:
      發(fā)生概率除以沒有發(fā)生概率再取對數。就是這個不太繁瑣的變換改變了取值區(qū)間的矛盾和因變量自變量間的曲線關系。究其原因,是發(fā)生和未發(fā)生的概率成為了比值 ,這個比值就是一個緩沖,將取值范圍擴大,再進行對數變換,整個因變量改變。不僅如此,這種變換往往使得因變量和自變量之間呈線性關系,這是根據大量實踐而總結。所以,Logistic回歸從根本上解決因變量要不是連續(xù)變量怎么辦的問題。還有,Logistic應用廣泛的原因是許多現實問題跟它的模型吻合。例如一件事情是否發(fā)生跟其他數值型自變量的關系。
    • 注意:
      如果自變量為字符型,就需要進行重新編碼。一般如果自變量有三個水平就非常難對付,所以,如果自變量有更多水平就太復雜。這里只討論自變量只有三個水平。非常麻煩,需要再設二個新變量。共有三個變量,第一個變量編碼1為高水平,其他水平為0。第二個變量編碼1為中間水平,0為其他水平。第三個變量,所有水平都為0。實在是麻煩,而且不容易理解。最好不要這樣做,也就是,最好自變量都為連續(xù)變量。
    • python代碼如下
    #導入包 import numpy as np import pandas as pd import statsmodels.formula.api as smf from sklearn import linear_model import matplotlib.pyplot as plt %matplotlib inlinefrom sklearn.model_selection import train_test_split,cross_val_score df=pd.read_excel("bankloan_binning.xlsx") print(df.head(2)) #訓練集和測試集 xtrain,xtest,ytrain,ytest=train_test_split(df.iloc[:,[2,3,4,5,6,7,8,9]],df.iloc[:,-1],test_size=0.2,random_state=0)#train_size=0.8 #驗證集 xtrain1,xvalid,ytrain1,yvalid=train_test_split(xtrain,ytrain,test_size=0.2,random_state=0)#train_size=0.8


    1. python數據處理標準流程

    第一、導入包和對應的類
    第二、實例化
    第三、擬合數據
    第四、評估模型
    第五、預測評分

    #-----------python數據處理標準流程------------ #第一、導入包和對應的類 #第二、實例化 #第三、擬合數據 #第四、評估模型 #第五、預測評分#分類預測 from sklearn import linear_model log=linear_model.LogisticRegression(solver="lbfgs",C=3) #"lbfgs"慢但穩(wěn)健;"newton-cg"不能處理多分類,但比lbfgs快;"sag"處理大型的列和行,二分類; log.fit(xtrain,ytrain)#擬合訓練集數據 log.score(xtest,ytest)#非監(jiān)督模型是transform,R方值 y_log=log.predict(xtest)#predict_probalog.coef_#回歸系數 exp=np.exp(log.coef_)#or值,解釋業(yè)務關系 gamma=(exp-1)/(exp+1)#gamma值,解釋變量相關強度 print([exp,gamma])# 老(新)樣本預測 x1=np.array([[2,1,3.767992,3.90,0.504108,3.767992,2.90,1.504108],[3,4,0.767992,3.90,1.504108,3.767992,0.90,1.504108]]) pdata=pd.DataFrame(log.predict_proba(x1))#fit.predict表示預測值 pdata.head(6)

    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)和決策樹算法,其他也能用,用的比較少

    #-----------交叉驗證----------- from sklearn.model_selection import cross_val_score,LeaveOneOut,KFold,GroupKFold cross_val_score(log,xtrain,ytrain,cv=3,scoring="f1")#默認是正確率,參數scoring="precision"or"recall",'f1' print('交叉驗證:%s'%scores1); print('平均交叉驗證得分:%s'% np.mean(scores1))

    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("最優(yōu)得分:%s" %grid_search.best_score_) print("測試得分:%s" %grid_search.score(xtest,ytest)) print("全部及最優(yōu)系數:%s" %grid_search.best_estimator_) print("定義搜索的最優(yōu)系數:%s" %grid_search.best_params_)#最后使用最優(yōu)系數構建模型 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)),#隨機森林("規(guī)范化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('缺失值統(tǒng)計量:',pipe.named_steps['缺失值1'].statistics_) print('變量變換:',pipe.named_steps['規(guī)范化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)),("規(guī)范化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("全部及最優(yōu)系數:%s" %grid_search_p.best_estimator_) # print("定義搜索的最優(yōu)系數:%s" %grid_search_p.best_params_)

    總結

    以上是生活随笔為你收集整理的python统计分析--4.Logistic回归的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。