牛客是一款不論是面試 還是刷題 都是非常有用的 還等什麼,傳送門- 牛客網python基礎
🥇作者簡介:大家好我是 uu 給剛入門的python的小夥伴帶來一套python 完整的入門基礎。
🥈個人首頁:uu首頁
📑 推薦一款非常火的面試、刷題神器👉 牛客網python基礎
覺得uu寫的不錯的話 麻煩動動小手 點贊👍 收藏⭐ 評論📄
今天給大家帶來的刷題系列是:使用梯度下降對邏輯回歸進行訓練
題目介紹:
描述
邏輯回歸是機器學習領域中被廣泛使用的經典模型。了解和正确使用邏輯回歸對于機器學習的實際應用至關重要。邏輯回歸通常使用極大似然的思想建構損失函數,并且在此基礎上使用梯度下降進行求解。通過求解極大似然思想表示的邏輯回歸損失函數對于參數 θ的梯度,可以得到參數的更新公式為:,其中
,請根據上述給定的資訊完成接下來的代碼補全。
從目前路徑下讀取資料集dataSet.csv、labels.csv,使用梯度下降的思想訓練邏輯回歸模型進行訓練,需要實作 sigmoid 函數和 gradientDescent 函數。其中,sigmoid 函數隻需給出基本的數學實作,gradientDescent 函數的入參是訓練資料矩陣 dataMatIn 和 classLabels,其格式均為 np.matrix,matrix 中的特征有3 次元,是以傳回值為經過疊代以後的參數矩陣,要求格式為 np.matrix 格式,次元為 3 * 1,分别代表了每一維特征的權重。
其中dataSet.csv示例資料如下:
lables.csv示例資料集如下:
解題思路:
使用 python 的包
import numpy as np
import pandas as pd
代碼解析:
import numpy as npimport pandas as pd
def generate_data():
datasets = pd.read_csv('dataSet.csv', header=None).values.tolist()
labels = pd.read_csv('labels.csv', header=None).values.tolist()
return datasets, labels
def sigmoid(X):
#補全 sigmoid 函數功能
#code start here
return 1.0 / (1 + np.exp(-X))
#code end here
def gradientDescent(dataMatIn, classLabels):
alpha = 0.001 # 學習率,也就是題目描述中的 α
iteration_nums = 100 # 疊代次數,也就是for循環的次數
dataMatrix = np.mat(dataMatIn)
labelMat = np.mat(classLabels).transpose()
m, n = np.shape(dataMatrix) # 傳回dataMatrix的大小。m為行數,n為列數。
weight_mat = np.ones((n, 1)) #初始化權重矩陣
#iteration_nums 即為循環的疊代次數
#請在代碼完善部分注意矩陣乘法的次元,使用梯度下降矢量化公式
#code start here
for i in range(iteration_nums):
hx = sigmoid(dataMatrix * weight_mat)
weight_mat = weight_mat - alpha * dataMatrix.transpose() * (hx - labelMat)
return weight_mat
#code end here
if __name__ == '__main__':
dataMat, labelMat = generate_data()
print(gradientDescent(dataMat, labelMat))