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

歡迎訪問 生活随笔!

生活随笔

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

python

Python梯度下降法实现二元逻辑回归

發布時間:2024/1/1 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python梯度下降法实现二元逻辑回归 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python梯度下降法實現二元邏輯回歸

二元邏輯回歸假設函數


定義當函數值大于等于0.5時,結果為1,當函數值小于0.5時,結果為0.函數的值域是(0, 1)。

二元邏輯回歸的損失函數


上圖為二元邏輯回歸的概率公式,則代價函數可以表示為

損失函數求偏倒數為

可以發現和線性回歸的結果是一樣的,只不過是假設函數h發生了變化。

正則化

為了避免過擬合,通常在代價函數后加一個正則化項,針對二元邏輯回歸,填加正則化項,
12∑j=1nθj2\frac{1}{2}\sum_{j=1}^{n}\theta _{j}^{2}21?j=1n?θj2?
這樣,隨時函數后就應該添加一項
1m∑j=1nθj\frac{1}{m}\sum_{j=1}^{n}\theta _{j}m1?j=1n?θj?

Python代碼實現

import numpy as np import matplotlib.pyplot as plt# 特征數目 n = 2 # 構造訓練集 X1 = np.arange(-2., 2., 0.02) m = len(X1)X2 = X1 + np.random.randn(m) # print(X1, X2) one = np.full(m, 1.0) Y = 1 / (np.full(m, 1.0) + np.exp(-(0.1 * np.random.randn(m)-np.full(m, 0.6) + 5*X1 + 2 * X2))) # Y Y = np.array([np.int(round(i)) for i in Y])# 梯度下降法 theta = np.random.rand(n+1) print(theta) X = np.vstack([np.full(m, 1), X1, X2]).T # 前一次的theta pre = np.zeros(n + 1) diff = 1e-10 max_loop = 10000 alpha = 0.01 lamda = 1 now_diff = 0 while max_loop > 0:#sum = np.zeros(n + 1)sum = np.sum([(1 / (1. + np.exp(- np.dot(theta, X[i]))) - Y[i])*X[i] for i in range(m)], axis=0)# for i in range(m):# sum += (1 / (1. + np.exp(- np.dot(theta, X[i]))) - Y[i])*X[i]theta = theta - (alpha * sum + alpha * lamda * theta)print("還差 %d 次" % max_loop, "theta = ", theta)now_diff = np.linalg.norm(theta - pre)if(now_diff <= diff):breakpre = thetamax_loop -= 1# 打印 print("find theta : ", theta, "now_diff : ", now_diff)# 畫出平測試例子圖 X_1 = np.array([(X1[i], X2[i]) for i in range(m) if Y[i] == 1]) X_0 = np.array([(X1[i], X2[i]) for i in range(m) if Y[i] == 0]) plt.scatter(X_1[:, 0], X_1[:, 1], c='r', marker='o') plt.scatter(X_0[:, 0], X_0[:, 1], c='g', marker='v')# 畫出求得的模型圖 point1 = np.arange(-2, 2, 0.02) point2 = (theta[0] + theta[1] * point1)/(-theta[2])plt.plot(point1, point2) plt.xlabel('X1') plt.ylabel('X2') plt.show()

效果圖如下

總結

以上是生活随笔為你收集整理的Python梯度下降法实现二元逻辑回归的全部內容,希望文章能夠幫你解決所遇到的問題。

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