使用tflearn进行回归的神经网络

我的问题是关于使用tflearn编写一个进行回归(而不是分类)的神经网络的代码。

数据集:

fixed acidity  volatile acidity  citric acid  ...  alcohol  quality   7.4             0.700            0.00         ...  9.4        5    7.8             0.880            0.00         ...  9.8        5  7.8             0.760            0.04         ...  9.8        5     11.2            0.280            0.56         ...  9.8        6      7.4             0.700            0.00         ...  9.4        5    

我想构建一个神经网络,它接受11个特征(葡萄酒中的化学值)并输出或预测一个分数,即质量(满分10分)。我不想对葡萄酒进行分类,如质量_1、质量_2等。我希望模型对我的特征执行回归函数,并预测一个10分内的值(甚至可以是浮点数)。

我的数据中的质量列只有值=[3, 4, 5, 6, 7, 8, 9]。它不包含1、2和10。

由于缺乏经验,我只能编写一个将葡萄酒分类为[score_3, score_4,…]等类别的神经网络,并且我使用了一热编码来实现这一点。

处理后的数据:

特征:

[[  7.5999999    0.23         0.25999999 ...,   3.02999997   0.44    9.19999981] [  6.9000001    0.23         0.34999999 ...,   2.79999995   0.54000002   11.        ] [  6.69999981   0.17         0.37       ...,   3.25999999   0.60000002   10.80000019] ...,  [  6.30000019   0.28         0.47       ...,   3.11999989   0.50999999    9.5       ] [  5.19999981   0.64499998   0.         ...,   3.77999997   0.61000001   12.5       ] [  8.           0.23999999   0.47999999 ...,   3.23000002   0.69999999   10.        ]]

标签:

[[ 0.  1.  0. ...,  0.  0.  0.] [ 0.  0.  0. ...,  0.  0.  0.] [ 0.  0.  0. ...,  1.  0.  0.] ...,  [ 0.  0.  0. ...,  0.  0.  0.] [ 0.  0.  0. ...,  0.  0.  0.] [ 0.  0.  1. ...,  0.  0.  0.]]

用于将数据分类到不同类别的神经网络代码:

import pandas as pdimport numpy as npimport tflearnfrom tflearn.layers.core import input_data, fully_connectedfrom tflearn.layers.estimator import regressionfrom sklearn.model_selection import train_test_splitdef preprocess():    data_source_red = 'F:\Gautam\...\Datasets\winequality-red.csv'      data_red = pd.read_csv(data_source_red, index_col=False, sep=';')                data = pd.get_dummies(data, columns=['quality'], prefix=['score'])    x = data[data.columns[0:11]].values    y = data[data.columns[11:18]].values    x = np.float32(x)    y = np.float32(y)    return (x, y)x, y = preprocess()train_x, test_x, train_y, test_y = train_test_split(x, y, test_size = 0.2)network = input_data(shape=[None, 11], name='Input_layer')network = fully_connected(network, 10, activation='relu', name='Hidden_layer_1')network = fully_connected(network, 10, activation='relu', name='Hidden_layer_2')network = fully_connected(network, 7, activation='softmax', name='Output_layer')network = regression(network, batch_size=2, optimizer='adam', learning_rate=0.01)model = tflearn.DNN(network)model.fit(train_x, train_y, show_metric=True, run_id='wine_regression',          validation_set=0.1, n_epoch=1000)

上面的神经网络表现不佳(准确率=0.40)。此外,它将数据分类到不同的类别中。我想知道如何编写一个回归神经网络,它可以为输入特征提供一个10分内的分数(而不是分类)。我更喜欢使用tflearn,因为我对它比较熟悉。


回答:

这是你的代码中使你的网络成为具有七个类别的分类器而不是回归器的一行:

network = fully_connected(network, 7, activation='softmax', name='Output_layer')

我不再使用TFLearn了,我已经转向使用Keras(它与TFLearn相似,并且有更好的支持)。然而,我建议你使用以下输出层代替:

network = fully_connected(network, 1, activation='linear', name='Output_layer')

此外,你的训练数据也需要更改。如果你想进行回归,你需要一个一维标量标签。我假设你仍然拥有原始数据,你说你已经更改了它?如果没有,UC Irvine机器学习数据仓库有带有单一数值质量列的葡萄酒质量数据

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注