Logistic回归 逻辑回归 练习——以2018建模校赛为数据源

把上次建模校赛一个根据三围将女性分为四类(苹果型、梨形、报纸型、沙漏)的问题用逻辑回归实现了,包括从excel读取数据等一系列操作。

Excel的格式如下:假设有r列,则前r-1列为数据,最后一列为类别,类别需要从1开始1~k类

如上表所示,前10列是身高、胸围、臀围等数据(以及胸围和腰围、胸围和臀围的比值),最后一列1表示属于苹果型。

import tensorflow as tf
import os
import numpy
import xlrd

XDATA = 0
YDATA = 0
one_hot_size = 0
M = 0

def readData():
    global XDATA, YDATA, one_hot_size, M
    workbook = xlrd.open_workbook(‘divdata.xlsx‘)
    booksheet = workbook.sheet_by_index(0)
    col = booksheet.ncols
    row = booksheet.nrows
    M = row
    tempcol = []
    for i in range(col - 1):
        tempcol = tempcol + booksheet.col_values(i)
    XDATA = numpy.array(tempcol).reshape(col - 1, row).T
    one_hot_size = int(max(booksheet.col_values(col - 1)))
    YDATA = numpy.zeros([row, one_hot_size])
    for i in range(row):
        YDATA[i, int(booksheet.cell_value(i, col - 1) - 1)] = 1

def getData(batch_size):
    ran = numpy.random.randint(0, M - 1, [batch_size])
    # print(ran)
    return XDATA[ran], YDATA[ran]

readData()
checkpoint_dir = ‘modelsave/‘
learning_rate = 0.0005
save_step = 100
total_step = 1000
batch_size = 1000
config = tf.ConfigProto()
config.gpu_options.allow_growth = True

x = tf.placeholder(tf.float32, [None, 10], name=‘x‘)
y_data = tf.placeholder(tf.float32, [None, 4], name=‘data‘)
# y = tf.Variable(tf.zeros(4,1), dtype=tf.float32,name=‘y‘)
# w = tf.Variable(tf.zeros([10, 4], dtype=tf.float32))
w = tf.Variable(numpy.zeros([10, 4]),dtype=tf.float32)
# b = tf.Variable(tf.zeros([1, 4], dtype=tf.float32))
b = tf.Variable(numpy.zeros([1,4]),dtype=tf.float32)
y = tf.nn.softmax(tf.matmul(x, w) + b)

loss = tf.reduce_mean(-tf.reduce_sum(y_data * tf.log(y), reduction_indices=1))  # 损失函数
optimizer = tf.train.GradientDescentOptimizer(learning_rate)  # 选择梯度下降的方法
train_op = optimizer.minimize(loss)  # 迭代的目标:最小化损失函数
sess = tf.InteractiveSession(config=config)  # 设置按需使用GPU
saver = tf.train.Saver()  # 用来存储训练结果

if not os.path.exists(checkpoint_dir):
    os.mkdir(checkpoint_dir)

#############################
# 读取并初始化:
ckpt = tf.train.get_checkpoint_state(checkpoint_dir)
if ckpt and ckpt.model_checkpoint_path:
    saver.restore(sess, ckpt.model_checkpoint_path)
else:
    sess.run(tf.global_variables_initializer())
##############################

print(sess.run(b))
for i in range(total_step):
    batch = getData(batch_size)
    # print(batch[0])
    # print(batch[1])
    sess.run(train_op, feed_dict={x: batch[0], y_data: batch[1]})
    if (i + 1) % save_step == 0:
        print(i + 1, sess.run(w), sess.run(b))
        saver.save(sess, checkpoint_dir + ‘model.ckpt‘, global_step=i + 1)  # 储存

writer = tf.summary.FileWriter(‘./my_graph‘, sess.graph)  # tensorboard使用

writer.close()
sess.close()

# 查看tensorboard的代码 在命令行输入:
# tensorboard --logdir=C:\Users\Rear82\PycharmProjects\MM_School_2018\my_graph

训练完成之后,使用以下代码读取并测试模拟:

import tensorflow as tf
import os
import numpy

checkpoint_dir = ‘modelsave/‘
config = tf.ConfigProto()
config.gpu_options.allow_growth = True

x = tf.placeholder(tf.float32, [None, 10], name=‘x‘)
w = tf.Variable(numpy.zeros([10, 4]),dtype=tf.float32)
b = tf.Variable(numpy.zeros([1,4]),dtype=tf.float32)
y = tf.nn.softmax(tf.matmul(x, w) + b)

sess = tf.InteractiveSession(config=config)  # 设置按需使用GPU
saver = tf.train.Saver()  # 用来存储训练结果

if not os.path.exists(checkpoint_dir):
    os.mkdir(checkpoint_dir)

#############################
# 读取并初始化:
ckpt = tf.train.get_checkpoint_state(checkpoint_dir)
if ckpt and ckpt.model_checkpoint_path:
    saver.restore(sess, ckpt.model_checkpoint_path)
else:
    print("Can‘t find trained nn.")
##############################

jdata = [[167,86,72,71.5,76.5,90.5,119.4444444,120.2797203,112.4183007,95.02762431]]
print(jdata)
print(sess.run(y,feed_dict={x:jdata}))

sess.close()

原文地址:https://www.cnblogs.com/zinyy/p/9190027.html

时间: 2024-07-30 21:01:08

Logistic回归 逻辑回归 练习——以2018建模校赛为数据源的相关文章

Logistic Regression[逻辑回归]

逻辑分布(Logistic distribution)公式 P(Y=1│X=x)=exp(x'β)/(1+exp(x'β)) 其中参数β常用极大似然估计. Logit模型是最早的离散选择模型,也是目前应用最广的模型. Logit模型的应用广泛性的原因主要是因为其概率表达式的显性特点,模型的求解速度快,应用方便. [0]  Logit模型 http://baike.baidu.com/link?url=IoF_-bOu5ABpdUGevcYvpcr4wEO6_cWK_fG8scQoOm4_-9DU

Spark MLlib Logistic Regression逻辑回归算法

1.1 逻辑回归算法 1.1.1 基础理论 logistic回归本质上是线性回归,只是在特征到结果的映射中加入了一层函数映射,即先把特征线性求和,然后使用函数g(z)将最为假设函数来预测.g(z)可以将连续值映射到0和1上. 它与线性回归的不同点在于:为了将线性回归输出的很大范围的数,例如从负无穷到正无穷,压缩到0和1之间,这样的输出值表达为"可能性"才能说服广大民众.当然了,把大值压缩到这个范围还有个很好的好处,就是可以消除特别冒尖的变量的影响. Logistic函数(或称为Sigm

Logistic Regression逻辑回归

参考自: http://blog.sina.com.cn/s/blog_74cf26810100ypzf.html http://blog.sina.com.cn/s/blog_64ecfc2f0101ranp.html ---------------------------------------------------------------------- Logistic regression (逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性.比如某用户购买某商品的可

Python数据挖掘—回归—逻辑回归

概念 针对因变量为分类变量而进行回归分析的一种统计方法,属于概率型非线性回归 优点:算法易于实现和部署,执行效率和准确度高 缺点:离散型的自变量数据需要通过生成虚拟变量的方式来使用 在线性回归中,因变量是连续性变量,那么线性回归能根据因变量和自变量存在的线性关系来构造回归方程,因变量变成分类变量后就不存在这种关系了,需通过对数变换来进行处理(Sigmoid函数) 步骤: 1.读取数据: import pandas from pandas import read_csv data=read_csv

Introduction to Logistic Regression(逻辑回归介绍)

++++ 介绍 在这篇博客中我们将讲解Logistic Regression的基本概念,以及它能帮我们解决什么样的问题. Logistic Regression 是一个分类算法,将用于观察的值分配给离散的数据集(set of classes),例如检测邮件是否是垃圾邮件,网上交易是否包含欺诈,恶性或者良性的肿瘤,Logistic Regression 使用 Sigmoid 函数来转换它的输出,用来返回一个概率值. 那么什么是Logistic Regression? 1.二元分类(eg : 肿瘤是

coursera 机器学习 logistic regression 逻辑回归的项目

github : https://github.com/twomeng/logistic-regression- ex1. m 1 %% Machine Learning Online Class - Exercise 2: Logistic Regression 2 % 3 % Instructions 4 % ------------ 5 % 6 % This file contains code that helps you get started on the logistic 7 %

derivative of cost function for Logistic Regression 逻辑回归代价函数偏导证明

机器学习总结之逻辑回归Logistic Regression

机器学习总结之逻辑回归Logistic Regression 逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分类问题如下: 回归问题:预测一个连续的输出. 分类问题:离散输出,比如二分类问题输出0或1. 逻辑回归常用于垃圾邮件分类,天气预测.疾病判断和广告投放. 一.假设函数 因为是一个分类问题,所以我们希望有一个假设函数,使得: 而sigmoid 函数可以很好的满足这个性质: 故假设函数: 其实逻辑回归为什么要用sigmoi

机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression

技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识,线性回归因为它的简单,易用,且可以求出闭合解,被广泛地运用在各种机器学习应用中.事实上,除了单独使用,线性回归也是很多其他算法的组成部分.线性回归的缺点也是很明显的,因为线性回归是输入到输出的线性变换,拟合能力有限:另外,线性回归的目标值可以是(?∞,+∞),而有的时候,目标值的范围是[0,1](可以表示概率值),那么就不方便了. 逻辑回归可以说是最为常用的机器学习算法之一,最经典的场景就