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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习Sklearn实战——其他线性回归模型、逻辑回归

發布時間:2025/3/21 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习Sklearn实战——其他线性回归模型、逻辑回归 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

線性回歸嶺回歸套索回歸比較

import numpy as np from sklearn.linear_model import LinearRegression,Ridge,Lasso#50樣本,200特征 #無解:無數個解 X = np.random.randn(50,200) w = np.random.randn(200) #將其中的190個置為0 index = np.arange(0,200) np.random.shuffle(index) w[index[:190]] = 0y = X.dot(w)import warnings warnings.filterwarnings("ignore")linear = LinearRegression(fit_intercept=False) ridge = RidgeCV(alphas = [0.001,0.01,0.1,1,2,5,10],cv =5,fit_intercept=False) lasso = LassoCV(alphas = [0.001,0.01,0.1,1,2,5,10],cv =3,fit_intercept=False) #lasso = LassoCV(eps = 0.001,n_alphas = 100) 最小alpha/最大alpha = 0.001,一共100個alphas linear.fit(X,y) ridge.fit(X,y) lasso.fit(X,y)linear_w = linear.coef_ ridge_w = ridge.coef_ lasso_w = lasso.coef_plt.figure(figsize = (12,9)) axes = plt.subplot(2,2,1) axes.plot(w)axes = plt.subplot(2,2,2) axes.plot(linear_w) axes.set_title("Linear")axes = plt.subplot(2,2,3) axes.plot(ridge_w) axes.set_title("ridge")axes = plt.subplot(2,2,4) axes.plot(lasso_w) axes.set_title("lasso")

嶺回歸可以讓系數變小(絕對值變小)

lasso適用于樣本量比特征少的情況(解稀松的,大部分是0小部分有值)

Ridge嶺回歸alpha優化

import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import RidgeX = 1/(np.arange(1,11)+np.arange(0,10).reshape(-1,1)) y = np.ones(10)ridge = Ridge(fit_intercept = False) alphas = np.logspace(start=-10,stop=-2,num=200) coefs = [] for a in alphas:ridge.set_params(alpha = a)ridge.fit(X,y)coefs.append(ridge.coef_)_ = plt.plot(alphas,coefs) plt.xscale("log") plt.ylabel("coef",fontsize = 25,c = "r",rotation = 0) plt.xlabel("alpha",fontsize = 25)

?選擇alpha使得系數波動不要太大,處于平滑區內的alpha

邏輯斯蒂回歸使用和概率計算

#邏輯斯蒂回歸回歸,用于分類而不是回歸 import numpy as np from sklearn.linear_model import LogisticRegression,LogisticRegressionCV from sklearn import datasets from sklearn.model_selection import train_test_splitX,y = datasets.load_iris(True) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2) lr = LogisticRegression() lr.fit(X_train,y_train)#3類,每類有4個特征 w = lr.coef_ b = lr.intercept_ proba_ = lr.predict_proba(X_test) proba_

結果:

array([[5.09606079e-01, 4.90348717e-01, 4.52032702e-05],[9.80326848e-03, 4.50092430e-01, 5.40104302e-01],[1.45104392e-01, 6.49836682e-01, 2.05058926e-01],[5.51336582e-02, 5.26504746e-01, 4.18361596e-01],[9.48111023e-02, 5.91492957e-01, 3.13695940e-01],[2.60577624e-01, 6.45623725e-01, 9.37986509e-02],[2.11365086e-01, 6.50469037e-01, 1.38165876e-01],[5.10353603e-01, 4.89628899e-01, 1.74987222e-05],[5.08742746e-01, 4.91240196e-01, 1.70586108e-05],[1.96810364e-02, 4.79731866e-01, 5.00587098e-01],[1.94451514e-02, 5.31561018e-01, 4.48993830e-01],[5.10854562e-01, 4.89122127e-01, 2.33113786e-05],[2.22292060e-04, 4.62528462e-01, 5.37249246e-01],[3.01995025e-03, 4.41724881e-01, 5.55255169e-01],[1.56646964e-02, 4.81293032e-01, 5.03042272e-01],[3.40320487e-01, 6.11925850e-01, 4.77536634e-02],[5.11071680e-01, 4.88912238e-01, 1.60819097e-05],[1.22637070e-03, 4.50146325e-01, 5.48627305e-01],[1.32742740e-01, 6.21872581e-01, 2.45384680e-01],[5.11788868e-01, 4.88183011e-01, 2.81211093e-05],[1.46877645e-02, 5.34107398e-01, 4.51204837e-01],[1.35101782e-01, 6.27332561e-01, 2.37565657e-01],[2.85783260e-04, 4.67009821e-01, 5.32704396e-01],[2.13811230e-03, 4.62006103e-01, 5.35855785e-01],[5.12675382e-01, 4.87273574e-01, 5.10444754e-05],[1.37568735e-03, 4.51505176e-01, 5.47119137e-01],[1.11661461e-03, 4.45720620e-01, 5.53162765e-01],[9.24839593e-03, 5.00073269e-01, 4.90678335e-01],[5.12965348e-01, 4.86940172e-01, 9.44806442e-05],[3.10479637e-01, 6.04577181e-01, 8.49431822e-02]]) lr.predict(X_test) #或者 proba_.argmax(axis = 1)

結果:

array([0, 2, 1, 1, 1, 1, 1, 0, 0, 2, 1, 0, 2, 2, 2, 1, 0, 2, 1, 0, 1, 1,2, 2, 0, 2, 2, 1, 0, 1])

參數multi_class默認ovr,one verse rest(一個拿出來,剩下的分開)

邏輯斯蒂回歸原理

?

?把分類問題轉化為概率問題了~

例子

? ? ? ?假如有一個罐子,里面有黑白兩種顏色的球,數目多少不知,兩種顏色的比例也不知。我們想知道罐中白球和黑球的比例,但我們不能把罐中的球全部拿出來數。現在我們可以每次任意從已經搖勻的罐中拿一個球出來,記錄球的顏色,然后把拿出來的球再放回罐中。這個過程可以重復,我們可以用記錄的球的顏色來估計罐中黑白球的比例。假如在前面的一百次重復記錄中,有七十次是白球,請問罐中白球所占的比例最有可能是多少?
請問罐子中白球的比例是多少?很多種可能10%,5%,95%
很多人馬上就有答案了:70%。而其后的理論支撐是什么呢
? ? ? ?我們假設罐中白球的比例是p,那么黑球的比例就是1-p。因為每抽一個球出來,在記錄顏色之后,我們把抽出的球放回了罐中并搖勻,所以每次抽出來的球的顏色服從同一獨立分布。這里我們把一次抽出來球的顏色稱為一次抽樣。題目中在一百次抽樣中,七十次是白球的概率是P(Data| M),這里Data是所有的數據,M是所給出的模型,表示每次抽出來的球是白色的概率為p。如果第一抽樣的結果記為x1,第二抽樣的結果記為x2... 那么Data = (x1,x2,…,x100)。這樣,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?P(Data | M)
???????????????????????????????????????????????????????????= P(x1,x2,…,x100|M)
???????????????????????????????????????????????????????????= P(x1|M)P(x2|M)…P(x100|M)
???????????????????????????????????????????????????????????= p^70(1-p)^30.
那么p在取什么值的時候,P(Data |M)的值最大呢?將p^70(1-p)^30對p求導,并其等于零。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 70p^69(1-p)^30-p^70*30(1-p)^29
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =解方程可以得到p=0.7
在邊界點p=0,1,P(Data|M)=0。所以當p=0.7時,P(Data|M)的值最大。這和我們常識中按抽樣中的比例來計算的結果是一樣的。?

x是數據,y是目標值

求l(θ)的最大值,l(θ)取負就是J(θ),也就是求?J(θ)的最小值

Sigmoid函數由下列公式定義

其對x的導數可以用自身表示:

邏輯斯蒂多分類概率的計算

?(1)二分類概率

import numpy as np from sklearn.linear_model import LogisticRegression,LogisticRegressionCV from sklearn import datasets from sklearn.model_selection import train_test_splitX,y = datasets.load_iris(True) cond = y!= 2 X = X[cond] y = y[cond] X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2)lr = LogisticRegression() lr.fit(X_train,y_train) w = lr.coef_ b = lr.intercept_#算法預測概率 proba_ = lr.predict_proba(X_test) proba_

結果:

array([[0.9824598 , 0.0175402 ],[0.95560881, 0.04439119],[0.94432792, 0.05567208],[0.9750612 , 0.0249388 ],[0.97827567, 0.02172433],[0.0082129 , 0.9917871 ],[0.01061486, 0.98938514],[0.00916639, 0.99083361],[0.02936961, 0.97063039],[0.9681616 , 0.0318384 ],[0.02180225, 0.97819775],[0.00153131, 0.99846869],[0.03473995, 0.96526005],[0.0469187 , 0.9530813 ],[0.94206507, 0.05793493],[0.98719755, 0.01280245],[0.00338637, 0.99661363],[0.00509725, 0.99490275],[0.98049792, 0.01950208],[0.00848055, 0.99151945]]) #手動計算概率 h = X_test.dot(w[0].T) + b #利用sigmoid函數求概率p p = 1/(1+np.e**(-h)) #輸出p和1-p np.c_[1-p,p]

結果:?

array([[0.9824598 , 0.0175402 ],[0.95560881, 0.04439119],[0.94432792, 0.05567208],[0.9750612 , 0.0249388 ],[0.97827567, 0.02172433],[0.0082129 , 0.9917871 ],[0.01061486, 0.98938514],[0.00916639, 0.99083361],[0.02936961, 0.97063039],[0.9681616 , 0.0318384 ],[0.02180225, 0.97819775],[0.00153131, 0.99846869],[0.03473995, 0.96526005],[0.0469187 , 0.9530813 ],[0.94206507, 0.05793493],[0.98719755, 0.01280245],[0.00338637, 0.99661363],[0.00509725, 0.99490275],[0.98049792, 0.01950208],[0.00848055, 0.99151945]]) #二分類概率,算法預測概率和手動計算概率是一樣的

(2)多分類概率

import numpy as np from sklearn.linear_model import LogisticRegression,LogisticRegressionCV from sklearn import datasets from sklearn.model_selection import train_test_splitX,y = datasets.load_iris(True) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2)#'multinomial' is unavailable when solver='liblinear' lr = LogisticRegression(multi_class = "multinomial",solver = "saga") lr.fit(X_train,y_train) #算法計算多分類概率 proba_ = lr.predict_proba(X_test) proba_

結果:

array([[2.88410409e-02, 8.68430604e-01, 1.02728355e-01],[1.35425475e-04, 3.53459725e-02, 9.64518602e-01],[2.74366088e-02, 8.45599073e-01, 1.26964318e-01],[9.70765988e-01, 2.92329109e-02, 1.10114994e-06],[3.15180958e-02, 8.72366639e-01, 9.61152657e-02],[2.18358607e-03, 4.89066995e-01, 5.08749419e-01],[1.96830364e-02, 7.58260236e-01, 2.22056727e-01],[9.44853451e-01, 5.51408435e-02, 5.70540180e-06],[1.13405580e-02, 6.87002802e-01, 3.01656640e-01],[9.79587742e-01, 2.04117299e-02, 5.27555711e-07],[5.98951042e-05, 1.18702819e-01, 8.81237286e-01],[3.47164044e-02, 7.33230956e-01, 2.32052639e-01],[1.60196473e-04, 6.14016641e-02, 9.38438139e-01],[1.03166644e-03, 2.35284113e-01, 7.63684221e-01],[1.12150578e-01, 8.36546008e-01, 5.13034134e-02],[3.50753564e-03, 3.58180255e-01, 6.38312209e-01],[9.50721555e-01, 4.92754157e-02, 3.02895857e-06],[3.22018571e-02, 7.12631766e-01, 2.55166376e-01],[4.17156930e-02, 8.95362961e-01, 6.29213464e-02],[7.28390583e-05, 4.82165378e-02, 9.51710623e-01],[9.34871389e-05, 1.43184860e-01, 8.56721653e-01],[9.57147401e-01, 4.28510583e-02, 1.54064852e-06],[1.71849989e-02, 9.09170591e-01, 7.36444101e-02],[1.63339316e-05, 5.16006260e-02, 9.48383040e-01],[9.63886223e-01, 3.61103171e-02, 3.45990329e-06],[4.59892725e-02, 8.79289824e-01, 7.47209033e-02],[9.82485407e-01, 1.75141232e-02, 4.69953109e-07],[3.20659441e-02, 8.68291530e-01, 9.96425258e-02],[2.44365427e-02, 9.02853574e-01, 7.27098834e-02],[6.67512001e-04, 1.09834800e-01, 8.89497688e-01]])

softmax公式以及例子

x = np.array([1,3,-1,10]) #softmax 軟最大:將數值轉化成概率,比較 prob = np.e**(x)/((np.e**(x)).sum()) prob

結果:

array([1.23280114e-04, 9.10923680e-04, 1.66841492e-05, 9.98949112e-01]) w = lr.coef_ b = lr.intercept_h = X_test.dot(w.T) + b #softmax函數,手動計算多分類概率 p = np.e**(h)/((np.e**(h)).sum(axis = 1).reshape(-1,1)) p

結果:

array([[2.88410409e-02, 8.68430604e-01, 1.02728355e-01],[1.35425475e-04, 3.53459725e-02, 9.64518602e-01],[2.74366088e-02, 8.45599073e-01, 1.26964318e-01],[9.70765988e-01, 2.92329109e-02, 1.10114994e-06],[3.15180958e-02, 8.72366639e-01, 9.61152657e-02],[2.18358607e-03, 4.89066995e-01, 5.08749419e-01],[1.96830364e-02, 7.58260236e-01, 2.22056727e-01],[9.44853451e-01, 5.51408435e-02, 5.70540180e-06],[1.13405580e-02, 6.87002802e-01, 3.01656640e-01],[9.79587742e-01, 2.04117299e-02, 5.27555711e-07],[5.98951042e-05, 1.18702819e-01, 8.81237286e-01],[3.47164044e-02, 7.33230956e-01, 2.32052639e-01],[1.60196473e-04, 6.14016641e-02, 9.38438139e-01],[1.03166644e-03, 2.35284113e-01, 7.63684221e-01],[1.12150578e-01, 8.36546008e-01, 5.13034134e-02],[3.50753564e-03, 3.58180255e-01, 6.38312209e-01],[9.50721555e-01, 4.92754157e-02, 3.02895857e-06],[3.22018571e-02, 7.12631766e-01, 2.55166376e-01],[4.17156930e-02, 8.95362961e-01, 6.29213464e-02],[7.28390583e-05, 4.82165378e-02, 9.51710623e-01],[9.34871389e-05, 1.43184860e-01, 8.56721653e-01],[9.57147401e-01, 4.28510583e-02, 1.54064852e-06],[1.71849989e-02, 9.09170591e-01, 7.36444101e-02],[1.63339316e-05, 5.16006260e-02, 9.48383040e-01],[9.63886223e-01, 3.61103171e-02, 3.45990329e-06],[4.59892725e-02, 8.79289824e-01, 7.47209033e-02],[9.82485407e-01, 1.75141232e-02, 4.69953109e-07],[3.20659441e-02, 8.68291530e-01, 9.96425258e-02],[2.44365427e-02, 9.02853574e-01, 7.27098834e-02],[6.67512001e-04, 1.09834800e-01, 8.89497688e-01]]) #多分類概率手動計算、算法計算的結果一樣 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的机器学习Sklearn实战——其他线性回归模型、逻辑回归的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日本在线免费视频 | 欧美黄色xxx | 91av小视频 | 九色精品在线 | 青青草原免费观看 | eeuss日韩| 欧美高清性xxxxhdvideosex | 色天使亚洲 | 日韩一级二级三级 | 日本一级黄 | 变态另类ts人妖一区二区 | 日本一区二区不卡在线 | 国产盗摄视频在线观看 | 黄色二级毛片 | 在线观看视频你懂得 | 国产av 一区二区三区 | 国产一区二区久久精品 | 免费毛片看 | 午夜快播| 97视频免费在线观看 | 精品久久久久久久中文字幕 | 淫妹妹影院 | 欧美色图第一页 | 天堂网中文 | 国产日韩精品一区二区三区在线 | 天堂av2014| 西川结衣在线观看 | 你懂的亚洲 | 久久大 | 青青草自拍视频 | 少妇喷潮明星 | 国产激情久久久 | 久草电影在线 | 在线观看wwww | 欧美亚洲一区二区在线观看 | 狠狠干美女 | 高清国产一区二区 | 五月激情av | 国产免费黄色小视频 | 成人动漫在线播放 | 婷婷综合另类小说色区 | 双性懵懂美人被强制调教 | 高跟丝袜av| 超碰伊人网 | 黄色一级大片在线免费看产 | 欧美精品久久久久性色 | 男女视频免费网站 | 亚洲一区91| 中日韩午夜理伦电影免费 | 精品欧美一区二区三区在线观看 | 国产系列在线观看 | 97人人射 | v片在线免费观看 | 在线视频成人 | 欧美视频在线观看一区二区三区 | 日韩精品人妻一区二区中文字幕 | 91玉足脚交嫩脚丫在线播放 | 超碰在线免费播放 | 美女的奶胸大爽爽大片 | 三级久久久 | 男女爽爽爽 | 51精品国自产在线 | 一区二区三区视频观看 | 99久国产 | 午夜肉体高潮免费毛片 | 水蜜桃色314在线观看 | 亚洲日本一区二区 | 日欧视频 | 九色蝌蚪91 | 一区二区三区在线观看免费视频 | 亚洲精品电影在线 | 台湾佬av | 91美女高潮出水 | 亚洲精品久久久久久动漫器材一区 | 抱着老师的嫩臀猛然挺进视频 | 青青草视频在线观看 | 99久草 | 操亚洲美女 | 毛片视频网站 | 天天色综网 | 国产成人精品一区二三区 | 成人在线观看18 | 亚洲av综合色区无码一区爱av | 国产精品美女久久久久av超清 | 久久午夜夜伦鲁鲁片无码免费 | 一区二区三区免费高清视频 | 伊人天堂网 | 成人h在线| 精品一卡二卡三卡 | 中日韩av在线 | 国产成人无码av在线播放dvd | 影音先锋在线观看视频 | 久久久久亚洲av无码专区桃色 | 狠狠干亚洲色图 | 免费中文字幕日韩欧美 | 亚洲性久久久 | 国产视频观看 | 草女人视频 | 一级黄色免费视频 |