1、線性迴歸
定義一個線性迴歸類LinearRegression
只使用一個庫numpy
在一開始導入
from numpy import *
(1)先進行初始化
由於傳入的是訓練樣本X以及標籤y,所以初始化函數爲:
def __init__(self, X, y):
self.m = len(X)
self.n = len(X[0])
self.theta = ones((self.n, 1))
self.X = mat(X)
self.y = mat(y).transpose()
這裏m表示訓練樣本的數量,n表示特徵的維度,theta是需要計算的參數。
(2)計算損失函數
損失函數公式如下:
可能有的公式會除以一個訓練樣本的大小m,由於m是一個常數,除不除都沒有什麼影響,關係不大。我這裏採用的是不除,個人感覺看的清爽一些。
代碼如下:
def costFunction(self):
h = dot(self.X, self.theta)
J = 0.5 * sum(array((self.y - h)) ** 2)
if isnan(J):
return (inf)
return J
(3)計算梯度
梯度計算公式如下:
與損失函數一樣,可能有的公式會除以一個訓練樣本的大小m,由於m是一個常數,除不除都沒有什麼影響,關係不大。我這裏依舊採用的是不除,個人感覺看的清爽一些。
代碼如下:
h = dot(self.X, self.theta)
self.grad = transpose(self.X).dot(self.y - h)
使用梯度下降的完整代碼:
def gradientDescent(self, alpha):
h = dot(self.X, self.theta)
self.grad = transpose(self.X).dot(self.y - h)
self.theta = self.theta + alpha * self.grad
(4)進行訓練
def train(self, iterations=1000, alpha=0.01, method=0):
for k in range(iterations):
self.gradientDescent(alpha)
詳細代碼請看:
https://github.com/2014214128/regression_model/blob/master/LinearRegression.py
實例一:
python train.py --s 0 --trainfile trainfile\train_linear.txt --modelfile modelfile\model_linear.txt
輸出:
theta:
[[1.77179994]
[2.87766185]]
cost:
3.2566489362105466
2、邏輯迴歸
定義一個邏輯迴歸類LogisticRegression
只使用一個庫numpy
在一開始導入
from numpy import *
(1)先進行初始化
由於傳入的是訓練樣本X以及標籤y,所以初始化函數爲:
def __init__(self, X, y):
self.m = len(X)
self.n = len(X[0])
self.theta = ones((self.n, 1))
self.X = mat(X)
self.y = mat(y).transpose()
這裏m表示訓練樣本的數量,n表示特徵的維度,theta是需要計算的參數。
(2)計算損失函數
損失函數公式如下:
代碼如下:
def sigmiod(self, x):
return 1.0 / (1.0 + exp(-1.0 * x))
def costFunction(self):
h = self.sigmiod(dot(self.X, self.theta))
J = -1.0 * (log(h).T.dot(self.y) + log(1 - h).T.dot(1 - self.y))
if isnan(J[0]):
return (inf)
return J[0]
(3)計算梯度
梯度計算公式如下:
其中
代碼如下:
h = self.sigmiod(dot(self.X, self.theta))
self.grad = transpose(self.X).dot(self.y - h)
使用梯度上升完整代碼:
def gradientAscent(self, alpha):
h = self.sigmiod(dot(self.X, self.theta))
self.grad = transpose(self.X).dot(self.y - h)
self.theta = self.theta + alpha * self.grad
(4)進行訓練 def train(self, iterations=1000, alpha=0.01, method=0):
for k in range(iterations):
self.gradientAscent(alpha)
詳細代碼請看:
https://github.com/2014214128/regression_model/blob/master/LogisticRegression.py
實例二:
python train.py --s 1 --trainfile trainfile\train_logistic.txt --modelfile modelfile\model_logistic.txt
輸出:
theta:
[[13.29983403]
[ 1.15405399]
[-1.8092296 ]]
cost:
[[9.37622416]]
博客中使用的所有數據集以及代碼在項目regression_model中均可找到
項目地址如下:
https://github.com/2014214128/regression_model
希望對大家理解迴歸模型有所幫助!