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
希望对大家理解回归模型有所帮助!