線性回歸和邏輯回歸其實沒有多大的區別,就是邏輯回歸多了乙個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 就是我們分類的依據。...