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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

《机器学习实战》chapter05 Logistic回归

發布時間:2025/3/16 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《机器学习实战》chapter05 Logistic回归 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(1)收集數據:任意方法

(2)準備數據:由于需要計算距離,因此要求數據類型為數值型,結構化數據格式則最佳

(3)分析數據:任意方法

(4)訓練算法:大部分時間將用于訓練,訓練的目的是為了找到最佳的分類回歸系數

(5)測試算法:一旦訓練完成,分類將會很快

Logistic回歸

  • 優點:計算代價不高,易于理解和實現
  • 缺點:容易欠擬合,分類精度可能不高
  • 適用數據類型:數值型和標稱型

對于回歸函數的選擇,我們想要的是能接受所有的輸入然后預測出類型。在兩個類別的情況下,上述函數輸出0或1,即單位階躍函數,這里我們使用Sigmoid函數,如果橫坐標足夠大,Sigmoid函數看起來很像一個階躍函數,公式如下:


為了實現Logistic回歸分類器,我們可以在每個特征上都乘以一個回歸系數,然后把所有結果值相加,把這個總和代入Sigmoid函數中進而得到一個0-1之間的數值。任何大于0.5的數據被分入1類,小于0.5的被分入0類。



1、梯度上升優化算法 from numpy import *# 加載數據 def loadData():dataMat = []labelMat = []fr = open("testSet.txt")for line in fr.readlines():lineArr = line.strip().split()# 為方便計算, X0設置為1dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])# 文件中的第三列為類別labelMat.append(int(lineArr[2]))return dataMat, labelMat# sigmoid def sigmoid(inX):return 1.0 / (1 + exp(-inX))# 梯度上升優化算法 def gradAscent(dataMatIn, classLabels):dataMatrix = mat(dataMatIn)# transpose()矩陣轉置labelMat = mat(classLabels).transpose()m, n = shape(dataMatrix)alpha = 0.001maxCycles = 500weights = ones((n, 1))# 重復maxCycles次for k in range(maxCycles):# 計算整個數據集的梯度,h和error是都是向量h = sigmoid(dataMatrix * weights)error = (labelMat - h)# 更新回歸系數向量weights = weights + alpha * dataMatrix.transpose() * errorreturn weights

可視化方法

# 畫出數據集和Logistic回歸最佳擬合直線的函數 def plotBestFit(weights):import matplotlib.pyplot as pltdataMat, labelMat = loadData()dataArr = array(dataMat)n = shape(dataArr)[0]xcord1 = []ycord1 = []xcord2 = []ycord2 = []for i in range(n):if int(labelMat[i]) == 1:xcord1.append(dataArr[i, 1])ycord1.append(dataArr[i, 2])else:xcord2.append(dataArr[i, 1])ycord2.append(dataArr[i, 2])fig = plt.figure()ax = fig.add_subplot(111)ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')ax.scatter(xcord2, ycord2, s=30, c='green')x = arange(-3.0, 3.0, 0.1)y = (-weights[0] - weights[1] * x) / weights[2]ax.plot(x, y)plt.xlabel('X1')plt.ylabel('X2')plt.show()

2、隨機梯度上升

# 隨機梯度上升算法,每次只用數據集中的一個樣本點來更新系數,順序遍歷整個數據集 def stocGradAscent0(dataMatrix, classLabels):# 強制類型轉換,避免array和list混用dataMatrix = array(dataMatrix)m, n = shape(dataMatrix)alpha = 0.01weights = ones(n)for i in range(m):# h和error是數值h = sigmoid(sum(dataMatrix[i] * weights))error = classLabels[i] - hweights = weights + alpha * error * dataMatrix[i]return weights

3、改進的隨機梯度上升

# 改進的隨機梯度上升算法, 多加一個迭代次數控制函數 # 在每次迭代中隨機地用單個樣本點更新數據集,每次迭代,遍歷整個數據集 def stocGradAscent1(dataMatrix, classLabels, numIter=150):# 強制類型轉換,避免array和list混用dataMatrix = array(dataMatrix)m, n = shape(dataMatrix)alpha = 0.01weights = ones(n)for j in range(numIter):dataIndex = list(range(m))for i in range(m):alpha = 4 / (1.0 + j + i) + 0.01randIndex = int(random.uniform(0, len(dataIndex)))h = sigmoid(sum(dataMatrix[randIndex] * weights))error = classLabels[randIndex] - hweights = weights + alpha * error * dataMatrix[randIndex]del dataIndex[randIndex]return weights

總結

以上是生活随笔為你收集整理的《机器学习实战》chapter05 Logistic回归的全部內容,希望文章能夠幫你解決所遇到的問題。

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