线性回归和逻辑回归分析

回归和分类的区别

回归:通过一堆数据,得出一个预测值

        例如:通过一个人的特征分析,预测银行会贷款给我多少钱

分类:通过一堆数据,得出0或者1的值

         例如:通过一个人的特征分析,预测银行会不会贷款给我 

线性回归:通过一堆数据,得出一个预测值. 预测值和真实值存在一定的差异,这个差异叫做误差项.

随机变量 服从一个均值为  、标准差为 (方差^2 )的概率分布,且其概率密度函数 [2] 

(注意上式中exp后面那部分是幂的关系,不是和exp相乘)则这个随机变量就称为正态(高斯)随机变量

exp 是以自然常数e(2.718282)为底的指数函数,EXP{2}是e的2次方.

似然函数是关于θ的函数而密度函数是关于x的函数

机器学习中线性回归目的:以误差项(有时候有可能不能直接求,可以通过变换得到一个新的函数)为目标函数(或者叫损失函数),通过学习使得所有训练集数据的误差项尽可能的趋于零.但是实际误差项在机器学习过程中无法迭代,所以转换为求其他函数.

偏导数 f'x(x0,y0) 表示固定面上一点对 x 轴的切线斜率偏导数 f'y(x0,y0) 表示固定面上一点对 y 轴的切线斜率

注意目标函数中的x和θ,不是一个数,也不是一个样本,而是一个样本中的数据特征和权重参数,是一个矩阵. 求最小值,即对θ求偏导,偏导为0.

线性回归:

求和与矩阵的转换,T表示转置

                 

                                      

矩阵的上标表示样本序列,下标表示特征序列

线性回归实例

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
%matplotlib inline

# 随机生成1000个点,围绕在y=0.1x+0.3的直线周围
num_points = 1000
vectors_set = []
for i in range(num_points):
    x1 = np.random.normal(0.0, 0.55)
    y1 = x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03)
    vectors_set.append([x1, y1])

# 生成一些样本
x_data = [v[0] for v in vectors_set]
y_data = [v[1] for v in vectors_set]

plt.scatter(x_data,y_data,c='r')
plt.show()

In [12]:

# 生成1维的W矩阵,取值是[-1,1]之间的随机数  即权重参数
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name='W')
# 生成1维的b矩阵,初始值是0  即偏置项(误差项)
b = tf.Variable(tf.zeros([1]), name='b')
# 经过计算得出预估值y
y = W * x_data + b

# 以预估值y和实际值y_data之间的均方误差作为损失
loss = tf.reduce_mean(tf.square(y - y_data), name='loss')
# 采用梯度下降法来优化参数
optimizer = tf.train.GradientDescentOptimizer(0.5)#0.5为学习率
# 训练的过程就是最小化这个误差值
train = optimizer.minimize(loss, name='train')

sess = tf.Session()

init = tf.global_variables_initializer()
sess.run(init)

# 初始化的W和b是多少
print("W =",sess.run(W),"b =", "lossess.run(b)s =", sess.run(loss))
# 执行20次训练
for step in range(20):
    sess.run(train)
    # 输出训练好的W和b
    print ("W =", sess.run(W), "b =", sess.run(b), "loss =", sess.run(loss))
#writer = tf.train.SummaryWriter("./tmp", sess.graph)
W = [-0.98704934] b = lossess.run(b)s = 0.47451138
W = [-0.64456743] b = [0.335968] loss = 0.17037457
W = [-0.41769895] b = [0.32486618] loss = 0.082887545
W = [-0.25984156] b = [0.3175121] loss = 0.040539894
W = [-0.1500148] b = [0.312395] loss = 0.02004169
W = [-0.07360455] b = [0.3088349] loss = 0.01011961
W = [-0.02044334] b = [0.306358] loss = 0.005316868
W = [0.01654273] b = [0.30463475] loss = 0.0029921203
W = [0.0422752] b = [0.30343583] loss = 0.0018668352
W = [0.06017816] b = [0.3026017] loss = 0.0013221455
W = [0.07263386] b = [0.30202135] loss = 0.0010584904
W = [0.08129972] b = [0.3016176] loss = 0.0009308692
W = [0.08732886] b = [0.30133668] loss = 0.0008690946
W = [0.09152354] b = [0.30114126] loss = 0.0008391929
W = [0.09444191] b = [0.30100527] loss = 0.000824719
W = [0.09647233] b = [0.30091068] loss = 0.0008177131
W = [0.09788496] b = [0.30084485] loss = 0.00081432174
W = [0.09886777] b = [0.30079907] loss = 0.0008126802
W = [0.09955155] b = [0.3007672] loss = 0.00081188575
W = [0.10002728] b = [0.30074504] loss = 0.00081150123
W = [0.10035826] b = [0.30072963] loss = 0.0008113151

In [13]:

plt.scatter(x_data,y_data,c='r')
plt.plot(x_data,sess.run(W)*x_data+sess.run(b))
plt.show()

逻辑回归:是经典的二分类算法

对于一个变量或者说函数A,带入另一个函数B,那么以A为自变量带入B之后,输出就会具有B的特征,比如把预测值带入sigmoid函数,那么它的输出在有限的计算中取值为0<g(z)<1,实际计算取不到0和1

对于训练数据的单个样本来说,y的取值是0或者1,是已知的,并且只取其中一个值,相当于把样本的真实值引入似然函数及后面的损失函数计算,最终目标是损失越小越好.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值