Мой вопрос касается кодирования нейронной сети, которая выполняет регрессию (а НЕ классификацию) с использованием tflearn.
Dataset:
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 (может быть даже с плавающей точкой).
Столбец качества в моих данных имеет только значения = [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, так как я вполне доволен этим.
Надеюсь, несколько изменений в моем коде - это все, что мне нужно. Спасибо.