对数几率回归

作者 : 开心源码 本文共2392个字,预计阅读时间需要6分钟 发布时间: 2022-05-13 共204人阅读

对数几率回归是利用广义线性模型处理二分类任务的一种方法。

对数几率回归简称对率回归,是使用Sigmoid函数作为联络函数时的广义线性模型,是广义线性模型的一个特例。

对于一个线性回归的模型我们一般都会定义为

y = W^TX + b

为了做一个二分类的预计我们可以做一个概率的判断

单位阶跃函数

但是单位阶跃函数是不连续的,难以求导,所以用对数几率函数替代

y = \frac{1}{1+e^z }

此函数最为一个激活函数在二分类的问题上简直是完美,此函数的特征

sigmoid函数

此函数有个自己的名字叫做sigmoid函数,我们可以看到在整个实数域上其结果值都限制在(0,1)中。

由此得到拟合模型

\hat{y} = \frac{1}{1+e^-(w^T+b )  }

为了简单我们设

参数替换

于是便有

使用极大似然预计对于y=1的概率,可以得到数据集每个样本的概率是

对于y_{i} \in {0,1},则有

最终损失函数

最小时的\beta 值,即可求出模型参数

最后使用梯度下降法进行拟合求出\iota 最小时\beta 的值

下面来看一个泰坦尼格号营救计划的一个实例

tensorflow 1.14.0

import pandas as pd
import numpy as np
import tensorflow as tf

一、数据准备

a.读取数据

data = pd.read_csv(‘./datasets/train.csv’)

b.查看数据结构

train.csv

c.数据数据解决

data = data[[ ‘Survived’, ‘Pclass’, ‘Sex’, ‘Age’, ‘SibSp’,

? ? ? ‘Parch’, ‘Fare’, ‘Embarked’]]

#对于null 值进行0的填充

data = data.fillna(0)

#将 pclass 数据设置成独热编码

data[‘p1’] = np.array(data[‘Pclass’] == 1).astype(np.float64)
data[‘p2’] = np.array(data[‘Pclass’] == 2).astype(np.float64)
data[‘p3’] = np.array(data[‘Pclass’] == 3).astype(np.float64)

#删除无用项

del data[‘Pclass’]

#查看Embarked项的值分布

data.Embarked.unique()

#将 Embarked 数据设置成独热编码

data[‘e1’] = np.array(data[‘Embarked’] == ‘S’).astype(np.float64)

data[‘e2’] = np.array(data[‘Embarked’] == ‘C’).astype(np.float64)

data[‘e3’] = np.array(data[‘Embarked’] == ‘Q’).astype(np.float64)

del data[‘Embarked’]

data_data = np.stack([data.Sex.values.astype(np.float64), data.Age.values.astype(np.float64), data.SibSp.values.astype(np.float64), data.Parch.values.astype(np.float64), data.Fare.values.astype(np.float64), data.p1.values, data.p2.values, data.p3.values, data.e1.values, data.e2.values, data.e3.values ]).T

data_target = np.reshape(data.Survived.values.astype(np.float64), (891,1))

二、网络设置

a.设置参数

x = tf.placeholder(‘float’, shape=[None, 11])

y = tf.placeholder(‘float’, shape=[None, 1])

b.输入训练数据

weights = tf.Variable(tf.random_normal([11,1]))

bias = tf.Variable(tf.random_normal([1]))

c.执行推断

output = tf.matmul(x, weights) + bias

pred = tf.cast(tf.sigmoid(output)>0.5, tf.float32)

d.计算损失

loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y, logits=output))

e.训练模型?

train_step = tf.train.GradientDescentOptimizer(0.001).minimize(loss)

f.评估

accuracy = tf.reduce_mean(tf.cast(tf.equal(pred, y), tf.float64))

最后开始进行训练

sess = tf.Session()

sess.run(tf.global_variables_initializer())

for i in range(10000):

? ? for n in range(len(data_target)//100):

? ? ? ? index = np.random.permutation(len(data_target))

? ? ? ? data = data_data[index]

? ? ? ? target = data_target[index]

? ? ? ? batch_xs = data[n:n+100]

? ? ? ? batch_xy = target[n:n+100]

? ? ? ? sess.run(train_step, feed_dict={x: batch_xs, y: batch_xy})

? ? if i%1000 == 0:

? ? ? ? print(sess.run((loss, accuracy), feed_dict={x:batch_xs, y:batch_xy}))

训练输出

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 对数几率回归

发表回复