TensorFlow实现 Logistic Regression

下面是用TensorFlow实现Logistic Regression,步骤都做了标注,不详细说了。

#encoding:utf-8

import tensorflow as tf
# 装在MNIST数据
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_Data/data/", one_hot=True)

# 一些参数
learning_rate = 0.01
training_epochs = 25
batch_size = 100
display_step = 1

# tf Graph Input
x = tf.placeholder(tf.float32, [None, 784]) # mnist图像数据 28*28=784
y = tf.placeholder(tf.float32, [None, 10]) # 图像类别,总共10类

# 设置模型参数变量w和b
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

# 构建softmax模型
pred = tf.nn.softmax(tf.matmul(x, W) + b)


# 损失函数用cross entropy
cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_indices=1))
# 梯度下降优化
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

# 初始化所有变量
init = tf.initialize_all_variables()

# Launch the graph
with tf.Session() as sess:
    sess.run(init)
    # Training cycle
    for epoch in range(training_epochs):
        avg_cost = 0.
        total_batch = int(mnist.train.num_examples/batch_size)
        # 每一轮迭代total_batches
        for i in range(total_batch):
            batch_xs, batch_ys = mnist.train.next_batch(batch_size)
            # 使用batch data训练数据
            _, c = sess.run([optimizer, cost], feed_dict={x: batch_xs,
                                                          y: batch_ys})
            # 将每个batch的损失相加求平均
            avg_cost += c / total_batch
        # 每一轮打印损失
        if (epoch+1) % display_step == 0:
            print "Epoch:", '%04d' % (epoch+1), "cost=", "{:.9f}".format(avg_cost)

    print "Optimization Finished!"

    # 模型预测
    # tf.argmax(pred,axis=1)是预测值每一行最大值的索引,这里最大值是概率最大
    # tf.argmax(y,axis=1)是真实值的每一行最大值得索引,这里最大值就是1
    correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))

    # 对3000个数据预测准确率
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    print "Accuracy:", accuracy.eval({x: mnist.test.images[:3000], y: mnist.test.labels[:3000]})

这里说下accuracy.eval()函数的作用:

f.Tensor.eval(feed_dict=None, session=None):

作用:
在一个Seesion里面“评估”tensor的值(其实就是计算),首先执行之前的所有必要的操作来产生这个计算这个tensor需要的输入,然后通过这些输入产生这个tensor。在激发tensor.eval()这个函数之前,tensor的图必须已经投入到session里面,或者一个默认的session是有效的,或者显式指定session.
参数:
feed_dict:一个字典,用来表示tensor被feed的值(联系placeholder一起看)
session:(可选) 用来计算(evaluate)这个tensor的session.要是没有指定的话,那么就会使用默认的session。
返回:
表示“计算”结果值的numpy ndarray

### 回答1: 逻辑回归是一种用于分类问题的机器学习算法,通常用于二元分类问题。在 Python 中,可以使用许多库来实现逻辑回归,例如 Scikit-learn、Statsmodels 和 TensorFlow 等。其中,Scikit-learn 是最流行的库之一。 使用 Scikit-learn 来实现逻辑回归的步骤如下: 1. 导入必要的库和数据 2. 准备数据集,包括分离特征和标签,划分训练集和测试集 3. 创建逻辑回归模型对象 4. 用训练数据拟合模型 5. 用测试数据评估模型的性能 以下是一个简单的例子: ```python from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn import datasets # 加载数据集 iris = datasets.load_iris() X = iris.data[:, :2] # 只取前两个特征 y = iris.target # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 创建逻辑回归模型对象 model = LogisticRegression() # 用训练数据拟合模型 model.fit(X_train, y_train) # 用测试数据评估模型的性能 score = model.score(X_test, y_test) print("Accuracy:", score) ``` 运行结果会显示逻辑回归模型在测试数据上的准确率。 ### 回答2: 逻辑回归是一种广泛应用于分类问题的机器学习算法,通常用于二元分类问题。在这个算法中,它的输出是一个概率估计值,表示某个样本属于某一类别的概率。概率估计值可以被转换为二元分类输出,通常是通过设置一个阈值,即概率值大于该阈值,则输出1,否则输出0。 在Python中,逻辑回归模型可以使用scikit-learn库轻松地实现。首先,我们需要将训练和测试数据整理成所需的格式,通常使用numpy和pandas这样的数据处理库来完成此任务。然后,我们可以创建一个逻辑回归对象,并使用fit方法拟合训练数据。然后,我们可以使用predict方法根据拟合的模型进行预测,并使用score方法评估模型的性能。 在逻辑回归的建模过程中,需要注意一些常见的问题。例如,数据集是否平衡,是否存在异常值,是否需要数据预处理、数据归一化等。此外,还需关注超参数的选择,包括正则化参数和学习率等。这些超参数的选择可以通过交叉验证等方式进行调优。此外,还可以使用特征工程来改进模型性能。 总之,逻辑回归是一种简单,快速,易于实现和解释的分类算法,适用于许多不同的应用场景。在Python中使用scikit-learn库,可以轻松地应用逻辑回归算法,并通过各种技术来优化模型性能。 ### 回答3: Logistic Regression是一种常见的分类算法,也可以看做是一种广义线性模型。 它主要用于将数据集划分为已知类别的概率较高的类别和概率较低的类别。在Python中,我们可以使用sklearn库中的LogisticRegression函数来实现这个算法。 首先,我们需要将数据集分为训练数据集和测试数据集。 使用训练数据集训练模型,并使用测试数据集测试模型的准确性。 然后,我们可以使用模型来预测新的数据集,并使用测试数据集和预测结果来计算模型的准确性。 在实现中,我们需要将输入数据和标签数据分别传递到模型中进行训练。我们还可以设置一些参数来控制模型的行为,例如正则化参数,solver类型,最大迭代次数等等。在训练完成后,我们可以使用get_params函数查看模型的参数值,并使用predict函数获取预测结果。 要注意的一点是,Logistic Regression算法通常在数据集中存在较大的类别不平衡时性能会下降,因此在实际应用中需要对数据进行预处理或采取其他相应措施以处理不平衡的类别问题。 总之Logistic Regression是一个十分通用且易于实现的机器学习算法,而Python中的sklearn库提供了简单且易于使用的API来实现这个算法。无论是初学者还是专业人士,都可以通过学习和实践掌握这个算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值