Использование нейросетей в прогнозировании качества машинного топлива

Заказать уникальную дипломную работу
Тип работы: Дипломная работа
Предмет: Искусственный интеллект
  • 60 60 страниц
  • 11 + 11 источников
  • Добавлена 26.06.2023
4 785 руб.
  • Содержание
  • Часть работы
  • Список литературы
Введение 3
1. Нефтепродукты 5
1.1. Определение фракционного состава 5
1.2. Основные характеристические параметры топлива 6
1.3. Дизельное арктическое и зимнее топливо 8
2. Использование виртуальных анализаторов 11
2.1. Способы отслеживания качества топлива 11
2.2. Причина востребованности модели предсказания качества топлива 11
2.3. Виртуальные анализаторы 13
3. Модели машинного обучения 15
3.1. Линейная регрессия 15
3.2. Множественная линейная регрессия 17
3.3. SVM регрессия 18
3.4. Метод ближайших соседей 19
3.5. PLS регрессия 20
3.6. Решающее дерево 22
3.7. Случайный лес 23
3.8. Модель AdaBoost 26
3.9. Градиентный бустинг 27
3.10. Нейронная сеть 30
3.11. Проблема переобучения 32
4. Анализ данных и обучение моделей 34
4.1. Используемые технологии 34
4.2. Анализ исходных данных 38
4.3. Обучение моделей 42
5. Сравнение моделей 45
Заключение 47
Список литературы 49
Приложение 51
Листинг программы 51
Визуализация зависимостей в исходных данных 59
Фрагмент для ознакомления

Он подходит для широкого круга задач, от простых до сложных, и может быть использован как для академических исследований, так и для промышленного применения.TensorFlow - это библиотека для создания и обучения нейронных сетей. Она разработана компанией Google и стала очень популярной в сфере машинного обучения. Основным преимуществом TensorFlow является его способность работать с большими объемами данных и высокой скоростью обучения нейронных сетей.Основным компонентом TensorFlow являются тензоры - многомерные массивы данных, которые используются для хранения и манипулирования данными. TensorFlow также предоставляет множество операций для работы с тензорами, таких как умножение, сложение, свертка и другие.TensorFlow также предоставляет множество утилит для загрузки, обработки и визуализации данных, а также для обучения и оценки нейронных сетей. С помощью TensorFlow вы можете создавать как простые, так и сложные нейронные сети, а также настраивать их гиперпараметры для достижения лучших результатов.Кроме того, TensorFlow позволяет использовать GPU для ускорения обучения нейронных сетей. Это особенно полезно при работе с большими объемами данных или сложными моделями нейронных сетей.Анализ исходных данныхВ качестве исходных данных для построения моделей были использованы следующие данные топливе:Уровень взлива, Масса нетто, Цетановое число, Цетановый индекс, Плотность при 15С, Мас. доля серы, t всп. опр. в закр. тигле, Коксуемость 10% остатка разгонки, Зольность, Мас. доля воды, Корр. мед. пласт.(3 ч при 50С), Кинематич. вязкость при 40 гр. С, до 180 С перег-ся, до 360 С перег-ся, 95% об. перег-ся при t, t фильтруем. предельн., t помутнения, Окислит. стаб.- общее кол-во осадка, Общее загрязнение, Смаз. способность, скор. диаметр пятна износа, Мас. доля полицикл. аром. у/в, Металлосодержащие присадки.Исходные данные были представлены в виде таблицы, после предварительной обработки (удаление повторов и пропусков, приведение типов) была вычислена матрица корреляции между переменными (рисунок 7). Рисунок 7. Матрица корреляции между переменными.Для того чтобы более глубоко понимать данные и их распределение, необходимо проводить визуализацию целевых переменных. Визуализация позволяет увидеть распределение данных на графиках, что позволяет лучше понять характеристики данных.Один из самых распространенных способов визуализации данных – это построение гистограммы. Гистограмма – это график, который показывает распределение данных по определенным интервалам. Гистограмма позволяет увидеть, как часто определенные значения встречаются в данных и как они распределены по интервалам. Это может помочь определить, имеются ли в данных выбросы или нет.Кроме гистограммы, также полезно строить оценки плотности распределения данных. Плотность – это функция, которая показывает вероятность того, что значение находится в определенном диапазоне. Построение плотности позволяет увидеть форму распределения данных и определить, является ли оно нормальным или нет.На рисунках 8-9 представлены гистограммы и оценки плотности распределения целевых переменных – температуры помутнения и предельнойтемпературыфильтруемости. Мы видим, что в исходных данных нет явных выбросов, кроме того,гистограммы показывают, что данные сконцентрированы около средних значений. Рисунок 8. Распределение температуры помутнения.Рисунок 9. Распределение предельнойтемпературыфильтруемости.Визуализация зависимости целевой переменной от каждой из предикторов также является важным шагом при предварительной обработке данных перед построением моделей машинного обучения. Это позволяет выявить возможные связи между переменными и определить, какие из них могут быть наиболее значимыми для построения модели.Для визуализации зависимости переменных часто используют диаграммы рассеяния. Диаграмма рассеяния – это график, на котором значения двух переменных отображаются на координатной плоскости в виде точек. Этот график может помочь выявить наличие корреляции между переменными и определить, какие из них наиболее значимы для построения модели.На рисунке 10 представлена зависимость целевых переменных от цетанового индекса. Мы видим, что повышение центанового индекса явно увеличивает целевые переменные, однако одной этой переменной предсказать температуры явно не получится. В приложении представлены диаграммы рассеяния для всех переменных, из них видно, что данные имеют сложную структуру и невозможно их описать с помощью элементарных моделей вроде простой линейной регрессии. В таких случаях хорошей практикой является применение нескольких моделей машинного обучения и выбор наилучшей из них.Рисунок 10. Распределение предельнойтемпературыфильтруемости.Обучение моделейПеред обучением любой модели машинного обучения необходимо разделить имеющиеся данные на две части: обучающую и тестовую выборки. Обучающая выборка используется для обучения модели, а тестовая - для проверки ее качества. Разделение на выборки необходимо, чтобы оценить, насколько хорошо модель справляется с прогнозированием значений на новых данных, которые ей неизвестны. Без разделения на выборки модель может переобучиться на обучающей выборке и показывать хорошие результаты на ней, но при этом не сможет хорошо обобщать свои знания на новых данных. При разделении данных на выборки стараются сохранить баланс классов и распределение признаков в обеих выборках.Кроме разделения выборки на обучающую и тестовую, существует еще один способ оценки качества модели - кросс-валидация. Она позволяет более точно оценить обобщающую способность модели, исключая вероятность переобучения.Однако, для проведения кросс-валидации необходимо иметь большое количество данных. В нашем случае мы имели ограниченный объем данных, поэтому использовали разделение на обучающую и тестовую выборки. Кроме того, мы проводили оптимизацию гиперпараметров с помощью перебора по сетке, что также помогло улучшить качество модели.В нашей работе мы также провели разделение на обучающую и тестовую выборки. Обучающая выборка использовалась для обучения моделей, а тестовая - для проверки их качества. При этом мы стремились сохранить баланс между размерами выборок и распределением признаков в каждой из них.Все рассмотренные в данной главе модели машинного обучения были обучены с использованием функции ошибки MAE (Mean Absolute Error), которая измеряет среднее абсолютное отклонение предсказанных значений от фактических. Эта функция используется в задачах регрессии, когда необходимо предсказать численное значение.После обучения каждой модели с использованием функции ошибки MAE мы провели оптимизацию гиперпараметров.Оптимизация гиперпараметров позволяет выбрать такие значения параметров модели, которые дают наилучшее качество предсказаний на тестовой выборке. Для этого мы использовали метод перебора по сетке, то есть перебрали все возможные комбинации гиперпараметров и выбрали ту, которая дала наилучшее качество на тестовой выборке. Такой подход позволяет найти оптимальные значения гиперпараметров без предвзятости в выборе определенного алгоритма оптимизации.Сравнение моделейВ таблице 4 представлены средние ошибки моделей (MAE) на обучающей и тестовой выборках. Как мы видим, некоторые модели показали явное переобучение (полиномиальная регрессии, решающее дерево), но большая часть показала достаточно хорошие результаты. Таблица 4. Метрики качества моделей.МодельСредняя ошибка на обучающей выборке, °ССредняя ошибка на тестовойвыборке, °СМножественная регрессия2.142.40Полиномиальная регрессия2.014.23SVM 1.973.32KNN 2.342.65PLS 2.142.40Решающее дерево0.002.56Случайный лес2.042.06Adaboost1.761.81Градиентный бустинг1.292.11Нейронная сеть1.952.14Наилучшей моделью здесь мы считаемAdaboost.Это связано, в первую очередь, с особенностями этой модели, а именно, ее способностью адаптироваться к сложным зависимостям в данных и уменьшать ошибку предсказания путем комбинирования нескольких базовых моделей. Несмотря на отсутствие возможности применения кросс-валидации из-за ограниченности объема доступных данных, проведенный анализ позволяет рекомендовать модель Adaboost в качестве наиболее эффективной для задачи регрессии в данном контексте.Анализ результатов показал, что в целом ансамблевые методы, такие как случайный лес, Adaboost и градиентный бустинг, показывают более высокую точность предсказания на этих данных по сравнению с линейными моделями и моделями на основе нейронных сетей. Это может быть связано с тем, что ансамблевые методы комбинируют несколько моделей и учитывают различные аспекты данных, что повышает их обобщающую способность.Также стоит отметить, что при обучении моделей необходимо контролировать переобучение, особенно учитывая небольшой размер обучающей выборки. В будущем можно рассмотреть и другие ансамблевые методы, такие как Bagging и Stacking, и провести более глубокий анализ переобучения на различных моделях.Мы также можем рекомендовать использовать нейронные сети в качестве моделей для решения этой задачи. Однако, для их эффективного применения, требуется очень тонкий подбор архитектуры и настройка множества гиперпараметров. Кроме того, для успешного обучения нейронных сетей, необходимо иметь большой объем данных, что может быть проблематичным в реальных проектах. В целом, можно сделать вывод, что ансамблевые методы являются предпочтительными на таких наборах данных, и их можно использовать для решения подобных задач, но необходимо следить за переобучением моделей и проводить оптимизацию гиперпараметров. ЗаключениеВ данной работе были рассмотрены различные модели машинного обучения для решения задачи предсказания температуры помутнения и предельной температуры фильтруемоститоплива. Были исследованы модели линейной регрессии, случайного леса, AdaBoost, градиентного бустинга и нейронных сетей.Было выяснено, что на данных, которые были использованы в данной работе, ансамблевые методы оказались предпочтительнее других моделей. В частности, модель Adaboost показала наилучшие результаты. Также было отмечено, что применение нейронных сетей возможно, но требует тонкой настройки архитектуры и большего количества данных для обучения.Для обучения всех моделей была использована функция ошибки MAE, а также проведена оптимизация гиперпараметров с помощью перебора по сетке. Перед обучением моделей данные были разделены на обучающую и тестовую выборки для оценки качества моделей.Итоговый анализ результатов показал, что рассмотренные в работе модели машинного обучения достаточно точно предсказывают температуру помутнения топлива и предельную температуру фильтруемости. Средняя ошибка не превышает 2 градусов по Цельсию, что является достаточно хорошим результатом для решения данной задачи.На основе полученных результатов можно рекомендовать использовать рассмотренные в работе модели для применения на реальных задачах предсказания температуры помутнения топлива и предельной температуры фильтруемости. Также следует отметить, что ансамблевые методы, в частности, Adaboost, являются предпочтительными для использования на таких данных, что подтверждает их применимость для решения задач предсказания температуры помутнения топлива и предельной температуры фильтруемости.В качестве возможных тем для дальнейших исследований мы предлагаем:Исследование влияния размера выборки на качество моделей, поскольку для некоторых методов, например нейронных сетей, требуется большой объем данных для достижения хороших результатов.Исследование возможности использования более продвинутых методов оптимизации гиперпараметров, таких как случайный поиск или оптимизация с помощью градиентов.Исследование возможности использования данных о составе топлива, а не только данных о его физических свойствах, для улучшения качества предсказаний.Исследование возможности использования ансамблевых методов в комбинации с нейронными сетями для улучшения точности прогнозирования.Список литературыКувыкин В.И., Кувыкина Е.В. Использование нейронных сетей для расчета качественных характеристик нефтепродуктов // Современные наукоемкие технологии. 2020 No 4 С. 26 - 30Ву С., Чжан Дж., Ли У., Ван Ю., Цао Х. Модель искусственной нейронной сети для прогнозирования точки закупорки холодного фильтра смешанного дизельного топлива // Топливный процесс. Технол.2006 No. 87 С. 585–590 Маринович C., Боланча Т., Юкич С., Рукавина В., Юкич А. Вычисление низкотемпературных характеристик дизельного топлива с помощью искусственных нейронных сетей // Химия и технология топлив и масел. 2012 No 1 С. 47–52 Авторский коллектив РГУ нефти и газа им. И. М. Губкина под руководством к.т.н. Багдасарова Л. Н. // Популярная нефтепереработка . 2017 С. 13-28ТетсуяОхтани. Применение искусственного интеллекта на нефтеперерабатывающих и нефтехимических заводах // Технический отчет Йокогавы. 2020 No.1 С. 7-10Технический регламент таможенного союза ТР ТС 013/2011 «О требованиях к автомобильному и авиационному бензину, дизельному и судовому топливу, топливу для реактивных двигателей и мазуту». А.Г. Шумихин, М.П. Зорин, А.М. Немтин, В.Г. Плехов. Опыт разработки системы виртуального анализа показателей качества продуктов установок каталитического риформинга бензиновых фракций и системы их подстройки в режиме реального времени // Вестник ПНИПУ. 2007 С. 45-53Gareth James, Daniela Witten, Trevor Hastie, and Robert Tibshirani. Introduction to Statistical Learning. Springer, 2017. AurélienGéron. Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow. O'Reilly Media, 2019. К.В.Воронцов (ред.). Data Science и машинное обучение. Сборник статей. Физматлит, 2019. Франсуа Шолле. Глубокое обучение. Погружение в мир нейронных сетей. ДМК Пресс, 2018.ПриложениеЛистинг программыimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsdf = pd.read_csv("data.csv")df.head()df = df.drop(["Unnamed: 0", "№ Актаонесоответствии"], axis=1)df["Корр. мед. пласт.(3 ч при 50С)"].unique()df["Корр. мед. пласт.(3 ч при 50С)"] = df["Корр. мед. пласт.(3 ч при 50С)"] == "Класс 1"df["Металлосодержащие присадки"].unique()df["Металлосодержащие присадки"] = df["Металлосодержащие присадки"] == "отсутствие"df.describe()df.dtypesdf.isna().sum()df_clean = df.dropna()(len(df), len(df_clean))df_clean.dtypesfor col, dtype in zip(df_clean.columns, df_clean.dtypes): if dtype == "object":df_clean[col] = pd.to_numeric(df_clean[col].apply(lambda s: s.replace(",", "."))) if dtype == "bool":df_clean[col] = pd.to_numeric(df_clean[col])correlation_matrix = df_clean.corr()sns.heatmap(data=correlation_matrix)df_clean["Корр. мед. пласт.(3 ч при 50С)"].unique()df_clean = df_clean.drop("Корр. мед. пласт.(3 ч при 50С)", axis=1)sns.histplot(data=df_clean, x="t помутнения", kde=True)plt.show()sns.histplot(data=df_clean, x="t фильтруем. предельн.", kde=True)plt.show()sns.pairplot(data=df_clean, y_vars=["t помутнения", "t фильтруем. предельн."], x_vars=df_clean.columns[0:5])plt.show()sns.pairplot(data=df_clean, y_vars=["t помутнения", "t фильтруем. предельн."], x_vars=df_clean.columns[5:10])plt.show()sns.pairplot(data=df_clean, y_vars=["t помутнения", "t фильтруем. предельн."], x_vars=df_clean.columns[10:15])plt.show()sns.pairplot(data=df_clean, y_vars=["t помутнения", "t фильтруем. предельн."], x_vars=df_clean.columns[15:])plt.show()y = df_clean[["t помутнения", "t фильтруем. предельн."]]X = df_clean.drop(["t помутнения", "t фильтруем. предельн."], axis=1)from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)from sklearn.linear_model import LinearRegressionfrom sklearn.metrics import mean_absolute_errormodel0 = LinearRegression()model0.fit(X_train, y_train["t помутнения"])(mean_absolute_error(model0.predict(X_train), y_train["t помутнения"]),mean_absolute_error(model0.predict(X_test), y_test["t помутнения"]) )from sklearn.preprocessing import PolynomialFeaturesfrom sklearn.pipeline import Pipelinemodel1 = Pipeline([("transform", PolynomialFeatures(2)), ("predict", LinearRegression())])model1.fit(X_train, y_train["t помутнения"])(mean_absolute_error(model1.predict(X_train), y_train["t помутнения"]),mean_absolute_error(model1.predict(X_test), y_test["t помутнения"]) )from sklearn.svm import SVRmodel2 = SVR(kernel="rbf", gamma="auto", shrinking=False)model2.fit(X_train, y_train["t помутнения"])(mean_absolute_error(model2.predict(X_train), y_train["t помутнения"]),mean_absolute_error(model2.predict(X_test), y_test["t помутнения"]) )from sklearn.linear_model import SGDRegressormodel3 = SGDRegressor(max_iter=100000)model3.fit(X_train, y_train["t помутнения"])(mean_absolute_error(model3.predict(X_train), y_train["t помутнения"]),mean_absolute_error(model3.predict(X_test), y_test["t помутнения"]) )from sklearn.neighbors import KNeighborsRegressormodel4 = KNeighborsRegressor(n_neighbors=15)model4.fit(X_train, y_train["t помутнения"])(mean_absolute_error(model4.predict(X_train), y_train["t помутнения"]),mean_absolute_error(model4.predict(X_test), y_test["t помутнения"]) )from sklearn.cross_decomposition import PLSRegressionmodel5 = PLSRegression(n_components=10)model5.fit(X_train, y_train["t помутнения"])(mean_absolute_error(model5.predict(X_train), y_train["t помутнения"]),mean_absolute_error(model5.predict(X_test), y_test["t помутнения"]) )from sklearn.tree import DecisionTreeRegressormodel6 = DecisionTreeRegressor()model6.fit(X_train, y_train["t помутнения"])(mean_absolute_error(model6.predict(X_train), y_train["t помутнения"]),mean_absolute_error(model6.predict(X_test), y_test["t помутнения"]) )from sklearn.ensemble import RandomForestClassifiermodel7 = RandomForestClassifier(n_estimators=5000)model7.fit(X_train, y_train["t помутнения"])(mean_absolute_error(model7.predict(X_train), y_train["t помутнения"]),mean_absolute_error(model7.predict(X_test), y_test["t помутнения"]) )from sklearn.ensemble import AdaBoostRegressormodel8 = AdaBoostRegressor(n_estimators=5000, loss="exponential")model8.fit(X_train, y_train["t помутнения"])(mean_absolute_error(model8.predict(X_train), y_train["t помутнения"]),mean_absolute_error(model8.predict(X_test), y_test["t помутнения"]) )from sklearn.ensemble import GradientBoostingRegressormodel9 = GradientBoostingRegressor(n_estimators=5000, learning_rate=0.001)model9.fit(X_train, y_train["t помутнения"])(mean_absolute_error(model9.predict(X_train), y_train["t помутнения"]),mean_absolute_error(model9.predict(X_test), y_test["t помутнения"]) )X_train = np.array(X_train).astype("float")y_train = np.array(y_train["t помутнения"])X_test = np.array(X_test).astype("float")y_test = np.array(y_test["t помутнения"])from sklearn.preprocessing import StandardScalerX_trian = StandardScaler().fit_transform(X_train)X_test = StandardScaler().fit_transform(X_test)import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import layersmodel = keras.Sequential( [ # layers.Dense(64, activation="relu"), # layers.Dense(64, activation="relu"), # layers.Dropout(rate=0.3),layers.LayerNormalization(),layers.Dense(3, activation="relu"),layers.Dense(3, activation="relu"),layers.Dense(1, activation="relu"), ])model.compile(loss="mean_squared_error", metrics=[keras.metrics.MeanAbsoluteError()], optimizer=keras.optimizers.SGD())model.fit(X_train, y_train.reshape(-1,1), epochs=10, validation_data=(X_test, y_test))Визуализация зависимостей в исходных данных

Кувыкин В.И., Кувыкина Е.В. Использование нейронных сетей для расчета качественных характеристик нефтепродуктов // Современные наукоемкие технологии. 2020 No 4 С. 26 - 30
Ву С., Чжан Дж., Ли У., Ван Ю., Цао Х. Модель искусственной нейронной сети для прогнозирования точки закупорки холодного фильтра смешанного дизельного топлива // Топливный процесс. Технол.2006 No. 87 С. 585–590
Маринович C., Боланча Т., Юкич С., Рукавина В., Юкич А. Вычисление низкотемпературных характеристик дизельного топлива с помощью искусственных нейронных сетей // Химия и технология топлив и масел. 2012 No 1 С. 47–52
Авторский коллектив РГУ нефти и газа им. И. М. Губкина под руководством к.т.н. Багдасарова Л. Н. // Популярная нефтепереработка . 2017 С. 13-28
Тетсуя Охтани. Применение искусственного интеллекта на нефтеперерабатывающих и нефтехимических заводах // Технический отчет Йокогавы. 2020 No.1 С. 7-10
Технический регламент таможенного союза ТР ТС 013/2011 «О требованиях к автомобильному и авиационному бензину, дизельному и судовому топливу, топливу для реактивных двигателей и мазуту».
А.Г. Шумихин, М.П. Зорин, А.М. Немтин, В.Г. Плехов. Опыт разработки системы виртуального анализа показателей качества продуктов установок каталитического риформинга бензиновых фракций и системы их подстройки в режиме реального времени // Вестник ПНИПУ. 2007 С. 45-53
Gareth James, Daniela Witten, Trevor Hastie, and Robert Tibshirani. Introduction to Statistical Learning. Springer, 2017.
Aurélien Géron. Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow. O'Reilly Media, 2019.
К.В.Воронцов (ред.). Data Science и машинное обучение. Сборник статей. Физматлит, 2019.
Франсуа Шолле. Глубокое обучение. Погружение в мир нейронных сетей. ДМК Пресс, 2018.