學習筆記(三)邏輯回歸

2021-09-11 14:52:24 字數 3458 閱讀 8358

線性回歸和邏輯回歸其實沒有多大的區別,就是邏輯回歸多了乙個sigmoid函式,使樣本能對映到[0,1]之間的數值,用來做分類問題。

線性回歸:線性指輸入變數是一次的,回歸即擬合,線性回歸即:確定唯一的因變數(需要**的值)和乙個或多個數值型的自變數(**變數)之間的關係。即:求出w,b的值y=f

(x)=

wx+b

y=f(x)=wx+b

y=f(x)

=wx+

b其中:w,x均為向量

sigmoid函式:

提取碼:yuma

# -*- coding: utf-8 -*-

"""created on thu feb 28 15:10:27 2019

@author: xinglin

"""import matplotlib.pyplot as plt

import numpy as np

class mylogisticregression:

def __init__(self):

pass

def sigmoid(self,x):

return 1.0 / (1.0 + np.exp(-x))

# 展示sigmoid

def show_sigmoid(self):

x = np.linspace(-10, 10)

y = self.sigmoid(x)

plt.plot(x,y)

plt.show()

# 載入資料

def loaddataset(self):

'''return---np array

traindataset:帶常數項的資料

dataset:原始資料

datalabel:標籤,類別列表

'''data = np.loadtxt('logistic regression/data1.txt', delimiter=',')

dataset = data[:,0:2]

#為了便於進行矩陣運算,每個樣本增加一列 1 ,表示常數項

b = np.ones((dataset.shape[0],1))

traindataset = np.concatenate([dataset,b],axis = 1)

datalabel = data[:,2]

return traindataset,dataset,datalabel

def showdata(self):

datamat,data,labelmat = self.loaddataset() # 載入資料集

pos = np.where(labelmat == 1)

neg = np.where(labelmat == 0)

plt.scatter(datamat[pos, 0], datamat[pos, 1], marker='o', c='b')

plt.scatter(datamat[neg, 0], datamat[neg, 1], marker='x', c='r')

plt.show()

def gradascent(self):

datamatin,orgdata,classlabels = self.loaddataset()

datamatrix = np.mat(datamatin) #轉換成numpy的mat

labelmat = np.mat(classlabels).transpose() #轉換成numpy的mat,並進行轉置

m, n = np.shape(datamatrix) #返回datamatrix的大小。m為行數,n為列數。

alpha = 0.01 #學習速率,控制更新的幅度。

maxcycles = 1000000 #迭代次數

weights = np.ones((n,1))

wlist =

for k in iter(range(maxcycles)):

h = self.sigmoid(datamatrix * weights) #梯度上公升向量化公式

error = labelmat - h

weights = weights + alpha * datamatrix.transpose() * error

return weights.geta() #將矩陣轉換為陣列,返回權重陣列

def plotbestfit(self,weights):

datamat,data,labelmat = self.loaddataset() # 載入資料集

pos = np.where(labelmat == 1)

neg = np.where(labelmat == 0)

plt.scatter(datamat[pos, 0], datamat[pos, 1], marker='o', c='b')

plt.scatter(datamat[neg, 0], datamat[neg, 1], marker='x', c='r')

x = np.arange(0, 100, 0.1)

y = (-weights[0] * x - weights[2]) / weights[1]

plt.plot(x,y)

plt.show()

if __name__ == '__main__':

model = mylogisticregression()

# model.show_sigmoid()

weights = model.gradascent()

print(weights)

model.showdata()

model.plotbestfit(weights)

執行效果:

這裡簡單的實現了邏輯回歸的基本原理,效果不是很好,所得的權重值不穩定,沒有結束條件,完全靠指定的次數結束。難以擬合。

想要更好的效果可以採用隨機梯度上公升演算法,或者支援向量機(svm),支援向量機,它被認為是目前最好的現成的演算法之一。

邏輯回歸學習筆記

邏輯回歸 邏輯回歸是乙個二分類問題,在分類過程值中可以得到代分類樣本所屬類別的概率。對於輸入x和輸出 結果y 邏輯回歸採用sigmoid函式,將實數域的x對映到 0 1 區間。sigmoid函式如下所示 h x 11 e x 則可以得到輸入x屬於正例和反例的概率,如下 py 1 x h x p y ...

學習筆記之邏輯回歸

引言 今天我們學習邏輯回歸。我們都知道線性回歸模型是y w tx b y w tx b y wtx b,我們對他進行變形,得到lny wtx blny w tx b lny wt x b,這就是 對數線性回歸 logit linear regression 就是我們所說的邏輯回歸。再變形y e wt...

邏輯回歸筆記

cost函式 邏輯回歸的代價函式,其實跟線性回歸有很大的不同。首先不僅僅是hypothesis函式的定義跟線性回歸很不一樣,理解邏輯回歸的最重要的一點就是先理解hypothesis函式。hypothesis的解釋是 在引數 下,輸入向量x對應y 1的概率 這裡,y 1 和y 0 就是我們分類的依據。...