Количественная оценка качества прогнозов нейронной сети Python - PullRequest
0 голосов
/ 28 мая 2018


Сегодня я хотел бы попросить вас помочь с качеством моей нейронной сети.Я работал с проектом по прогнозированию параметров в металлургии.Чтобы убедиться, что моя нейронная сеть работает правильно, я попытался использовать некоторые функции «Scikit-learn», такие как «Score» и «R ^ 2», но безуспешно.

С реальным кодом my«r²» равно -10.42239374572942, это значение нереально, потому что все знают, что r² должно быть между -1 и 1.

У кого-нибудь есть предложения по оценке моей нейронной сети?Почему мой код не работает?

Так, ребята.Увидимся.

Следуйте над моим кодом:

# coding: utf-8

import pandas as pd
import numpy as np

#modulo de plot
import matplotlib.pyplot as plt

#modulo da rede propriamente dita
from sklearn.neural_network import MLPRegressor

#para testar a rede neural
from sklearn.model_selection import train_test_split

#para normalização
from sklearn.preprocessing import StandardScaler

#para testar a qualidade da rede neural
from sklearn.metrics import mean_squared_error, r2_score

#buscando o CSV com os dados do AF1-Gerdau
df = pd.read_csv('Rede3.03.11.17_MOACIR_b.csv', delimiter=';', encoding = "ISO-8859-1" )

df2 = df.dropna(how='all')


# ## Definindo as variáveis inputs e a resposta

X = df2.drop(['Fuel Rate'], axis=1) #deixando todas as colunas exceto a variável resposta "Fuel Rate"
y = df2['Fuel Rate'] #variável respota "Fuel Rare"

# ## Normalizando os dados para uma melhor convergência

scaler = StandardScaler()
X_train, X_test, y_train, y_test = train_test_split(X, y)

# Treinamento apenas com os dados de treino
scaler.fit(X_train)

# Aplicando a transformação de normalização dos dados:
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

# ## Criando os parametros da RNA
rna = MLPRegressor(hidden_layer_sizes=(13,13,13), max_iter=2000)

# ## Treinando a RNA
rna.fit(X_train,y_train)

# ## Testando a rede
y_predicted = rna.predict(X_test)

# The coefficients
print('Coefficients: \n', r2_score(y_test, y_predicted))

1 Ответ

0 голосов
/ 28 мая 2018

Начнем с того, что r2_score() метрика может быть сколь угодно низкой. Оно не должно быть между -1 и 1 и не соответствует коэффициенту корреляции Пирсона.В этом случае оценка ~ -10 означает, что модель работает значительно хуже, чем модель, которая выводит средние значения (соответствующие оценке r2, равной 0).

Выбранный r2_score() является точной предварительной метрикой.для вашей модели.Вывод выглядит странно не потому, что есть проблема с метрикой, а потому что есть проблема с моделью.В текущем состоянии улучшение r2_score(), вероятно, улучшит любую другую интересную метрику.Возможно, вас также заинтересует сходство между метриками в вашем наборе тестов и метриками в вашем наборе поездов - чем больше они похожи, тем выше вероятность того, что ваша модель будет хорошо обобщена (согласно гипотезе многообразия или любой другойрамки, избегающие бесплатных теорем обеда).В зависимости от предполагаемого применения, вы можете заботиться о худшем случае - может не иметь значения, если у вас есть r2 0,999, если в худшем случае автомобиль с самостоятельным вождением ошибочно принимает пешехода за безопасное местоводить.Возможно, вас заинтересует широкий диапазон калибровочных баллов - если ваша модель предсказывает сильный паттерн с хорошей точностью, но остатки демонстрируют сильное смещение в модели, что-то может очень хорошобыть не в порядке.В целом, качество модели сильно зависит от ее предполагаемого применения, и ваши показатели должны отражать ваши конечные цели.Используя в качестве примера для изученных структур индекса , иногда обобщение - это плохо, а вовсе не то, что вам нужно.

В вашем подходе существует несколько потенциальных проблем.Я не совсем уверен в металлургии, но многие проблемы химии имеют хаотическую динамику взаимодействия и нелегко моделируются наивным подходом , который просто накладывает модель на входные данные (наивное здесь не подразумевается отрицательно -наивный подход часто является хорошей отправной точкой и может полностью удовлетворить существующие требования.

Как правило, большая часть преимуществ, которые вы найдете, будет в разработке функций. В случае химических проблем это может включать в себя получение результатов из стандартных решений проблемы (которых явно недостаточно, поскольку вы идете прямо к машинному обучению), и рассматриваете их как функции в вашей нейронной сети.Идея состоит в том, что, хотя ни одна отдельная модель не является идеальной, они часто достаточно хороши и ошибочны по-разному, так что нейронная сеть способна выяснить, как объединить их вместе, чтобы получить лучший ответ.Это тип техники ансамбля.

Какие визуализации / анализ данных вы сделали?У вас есть представление о том, какие особенности соответствуют выходу, который вы пытаетесь предсказать?Возможно даже, что у вашего входа недостаточно информации, чтобы предсказать желаемый результат.Вы изучили данные, прежде чем сбросить значения NaN?Принесет ли лучший метод вменения дополнительный выигрыш?Ваша модель закодирована нормально. Понимание ваших данных - это, пожалуй, самая важная задача.

У Scikit-learn могут возникнуть проблемы с оптимизацией сетей с небольшим количеством узлов на каждом уровне.Процедура поиска в сетке и перекрестная проверка, помогающие определить оптимальные параметры, могут существенно улучшить вашу модель.Решение может быть чувствительным к допускам и другим подобным параметрам.

...