繁体   English   中英

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

[英]Neural Network for Regression with 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分))的神经网络。 我不想像quality_1,quality_2等那样对葡萄酒进行分类...我希望模型对我的特征执行回归函数,并预测值不超过10(甚至可能是浮点数)。

我的数据中的quality列仅具有值[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 pd
import numpy as np
import tflearn
from tflearn.layers.core import input_data, fully_connected
from tflearn.layers.estimator import regression
from sklearn.model_selection import train_test_split


def 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(类似,并且具有更好的支持)。 但是,我建议您改用以下输出层:

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

此外,您的训练数据也需要更改。 如果要执行回归,则需要一维标量标签。 我假设您仍然拥有原始数据,即您说已更改的数据? 如果不是, 则UC Irvine机器学习数据存储库具有带有单个数字“质量”列的葡萄酒质量数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM