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

歡迎訪問 生活随笔!

生活随笔

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

python

Python统计分析--- 5.统计法与随机梯度下降(SGD)

發布時間:2023/12/15 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python统计分析--- 5.统计法与随机梯度下降(SGD) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#導入包 import numpy as np import pandas as pd import matplotlib as plt import statsmodels.formula.api as smf from sklearn import linear_model import matplotlib.pyplot as plt %matplotlib inline#使用pandas讀取數據支持xls和xlsx data=pd.read_excel("bankloan_binning.xlsx") data.head(3)#顯示數據開頭6行 #隨機梯度下降(Stochastic Gradient Descent) x1=np.array([1,2,3]) x2=np.array([3,2,2]) y=np.array([1,0,1]) plt.scatter(x1,y)#1.sgd最小化模型誤差 """ w=w+alpha*(y-p)*p*(1-p)*x 注:w為回歸系數,alpha學習率,在[0 1]之間,通常設為0.3方程:log(p/(1-p))=b0+b1*x1+b2*x2,or p=1/(1+exp(-(b0+b1*x1+b2*x2))) """ #2.sgd算法""" 迭代#1 令:b0=0,b1=0,b2=0,則p=1/(1+exp(-(0+0*1+0*3)))=0.5 因為w=w+alpha*(y-p)*p*(1-p)*x, 所以, b0=0+0.3*(1-0.5)*0.5*(1-0.5)*1=0.0375 #這里的1和下面的1不一樣,這里的是默認為1 b1=0+0.3*(1-0.5)*0.5*(1-0.5)*1=0.0375 #這里的1是x1的值 b2=0+0.3*(1-0.5)*0.5*(1-0.5)*3=0.1125 #這里的1是x2的值迭代#2 令:b0=0.0375,b1=0.0375,b2=0.1125,則p=1/(1+exp(-(0.0375+0.0375*2+0.01125*2)))=0.534 因為w=w+alpha*(y-p)*p*(1-p)*x, 所以, b0=0.0375+0.3*(0-0.534)*0.534*(0-0.534)*1= b1=0.0375+0.3*(0-0.534)*0.534*(0-0.534)*2= b2=0.01125+0.3*(0-0.534)*0.534*(0-0.534)*2=迭代#3......注:一共6行數據,迭代后重新從第一行開始,則6次迭代為一個epoch(全部樣本訓練一次) """ print() #導入包 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(1)) 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數據處理標準流程=============== #第一、導入包和對應的類 #第二、實例化 #第三、擬合數據 #第四、評估模型 #第五、預測評分#分類預測 from sklearn.linear_model import SGDClassifier sgd_clf=SGDClassifier(loss='log',random_state=123) sgd_clf.fit(xtrain,ytrain)#擬合訓練集數據 sgd_clf.score(xtest,ytest)#非監督模型是transform y_sgd=sgd_clf.predict(xtest)#predict_probafrom sklearn.metrics import classification_report print(classification_report(ytest,y_sgd,target_names=['非違約','違約']))sgd_clf.coef_,sgd_clf.intercept_ # 老(新)樣本預測 # 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(sgd_clf.predict_proba(x1))#predict_proba需要logsitic回歸 # pdata.head(6)

#==================2.模型參數=================== sgd_clf=SGDClassifier(loss='hinge',penalty='l2',alpha=0.0001,l1_ratio=0.15,fit_intercept=True,max_iter=1000,tol=0.001,shuffle=True,verbose=0,epsilon=0.1,n_jobs=None,random_state=None,learning_rate='optimal',eta0=0.0,power_t=0.5,early_stopping=False,validation_fraction=0.1,n_iter_no_change=5,class_weight=None,warm_start=False,average=False, ) print(""" #特點:1.SGD允許minibatch(在線/核外oob)學習,使用partial_fit方法;2.擬合大型列和行;3.稀疏數據處理(loss參數和罰值控制),4.SGDClassifier支持多分類,依”one-vs-all”的形式 #損失函數:loss=”hinge”: (soft-margin)線性svm;loss=”modified_huber”:穩健的異常值處理;loss=”log”:logistic回歸loss=”perceptron”:感知器算法其他損失函數如回歸張的'huber', 'epsilon_insensitive' #懲罰項(或正則化):l1與elasticnet可用于稀疏數據penalty=”l2”: 對coef_的L2范數罰項;penalty=”l1”: L1范數罰項;penalty=”elasticnet”: L1與L2的convex組合; #alpha:乘以正則項的常數或變量(最優化算法); #l1_ratio:彈性網混合參數,默認為0.15。取值[0,1],l1_ratio=0為L2,l1_ratio=1則為L1,注:(1-l1_ratio)*L2+l1_ratio*L1 #max_iter: int,可選(默認=1000):遍歷訓練數據的最大值(又名epochs)。只影響fit(),對partial_fit無效; #shuffle : bool,默認值為True,是否在每次epoch后隨機打亂訓練數據(洗牌)。 #epsilon : float,如果loss='huber'或 'epsilon_insensitive'或 'squared_epsilon_insensitive'時可用;如果預測和觀測值間的差值小于此閾值,則忽略,即異常值修正參數; #learning_rate : string,默認'optimal';learning_rate='constant':eta = eta0,注eta0為初始學習率;learning_rate='optimal':eta = 1.0 / (alpha * (t + t0)),<---最好的學習率learning_rate='invscaling':eta = eta0 / pow(t, power_t),注power_t選項另外指定;learning_rate='adaptive':如果誤差持續下降,則eta = eta0,否則(n_iter_no_change等參數滿足)學習率除以5; #validation_fraction : float, default=0.1,驗證集比例; #warm_start : bool,默認False,如果True,調用之前的解決擬合值作為初始化,否則清除; """)

總結

以上是生活随笔為你收集整理的Python统计分析--- 5.统计法与随机梯度下降(SGD)的全部內容,希望文章能夠幫你解決所遇到的問題。

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