Итак, если вы начали машинное обучение, вы, вероятно, слышали о нейронных сетях! Так что же такое нейронная сеть? По сути, это один из самых эффективных и популярных алгоритмов, используемых в наши дни в машинном обучении. И у него есть структура, подобная нейронам, которые мы создали в нашем мозгу! Интересно, правда?

Итак, давайте напишем короткий код, чтобы предсказать, будет ли человек сдавать кровь или нет. В этом коде используется Tensorflow (библиотека для машинного обучения и глубокого обучения от Google). Я настоятельно рекомендую вам использовать коды, которые используют в нем оценщики тензорного потока, если вы не используете встроенные модели из keras и sci-kit learn. Это потому, что они экономят много времени и имеют заранее написанные коды. Писать алгоритмы прямого и обратного распространения в нейронных сетях становится очень сложно! Так что продолжайте и используйте такие коды. Хорошо, теперь хватит! Давайте начнем!

Итак, давайте начнем с импорта некоторых библиотек. Numpy предназначен для численных расчетов, а pd - для игры с вашими наборами данных!

import tensorflow as tf 
import pandas as pd 
import numpy as np

Итак, теперь давайте определимся с нашими параметрами. Пропорция training_size предназначена для разделения данных обучения и тестирования (ПОМНИТЕ! Никогда не используйте одни и те же данные обучения и тестирования). Затем мы перемешиваем, потому что, если мы этого не сделаем, есть вероятность, что модель обучена на всех людях, которые склонны сдавать кровь, поэтому она никогда не узнает о людях, которые никогда не будут сдавать кровь. Просто сбросьте показатель точности до 0, чтобы убедиться, что нет никакого мусора. Скрытые блоки говорят, что есть 3 скрытых слоя с 10, 20, 10 узлами соответственно. Steps_spec дает количество шагов, на которых вы должны обучать модель. Настройте tmp_dir_spec в каталог, в котором вы хотите сохранить все контрольные точки вашей модели. Убедитесь, что данные находятся в той же папке, что и ваш файл .ipynb. Вы можете скачать записную книжку и набор данных с моего GitHub ниже. Настройте функции ввода и вывода в соответствии с вашими потребностями. «Https://github.com/kaiwalya/Transfusion секс

training_set_size_portion = 0.8 
do_shuffle = True 
accuracy_score = 0 
hidden_units_spec = [10,20,10] 
n_classes_spec = 2 
steps_spec = 200000 
epochs_spec = 15 
tmp_dir_spec = “C:/Users/XYZ/Desktop/ML/Sourcecodes/NN/ckpt_tranfusion” 
file_name = “transfusion.csv” 
features = [‘recency’,’tinv’,’monetary’,’t’] 
# Here’s the label that we want to predict — it’s also a column in # the CSV labels = [‘op’]

Хорошо, теперь давайте поиграем с набором данных! С помощью приведенного ниже кода вы сможете визуализировать свои данные. попробуйте что-нибудь вроде my_data.head (10), чтобы получить первые 10 столбцов. Мы сохраняем имя нашего набора данных my_data вместо transfusion.

my_data = pd.read_csv("transfusion.csv",dtype=float) 
my_data.head()

Теперь давайте просто рандомизируем данные, чтобы избежать проблем с тарификацией!

if do_shuffle:
 randomized_data = my_data.reindex(np.random.permutation(my_data.index))
else:
 randomized_data = my_data

Вы можете снова визуализировать свои данные, написав my_data.head (), чтобы убедиться, что все правильно рандомизировано!

Теперь разделим обучающие и тестовые данные для дальнейших расчетов. И создан для обучения функциям и этикеткам.

total_records = len(randomized_data) 
training_set_size = int(total_records * training_set_size_portion) test_set_size = total_records = training_set_size
# Build the training features and labels
training_features = randomized_data.head(training_set_size[features].copy()
training_labels = randomized_data.head(training_set_size[labels].copy()
print(training_features.head())
print(training_labels.head())

Теперь сделаем то же самое для тестирования. Если вы получаете ошибки с «отступами», просто очистите пустые места. Они будут решены!

#Build the testing features and labels
testing_features = randomized_data.tail(test_set_size)[features].copy()
testing_labels = randomized_data.tail(test_set_size)[labels].copy()

Написание для столбцов характеристик:

feature_columns = [tf.feature_column.numeric_column(key) for key in features]

Теперь перейдем к главному, tf.estimator. Это причина и часть кода, который делает все за нас, как алгоритм обратного распространения в нейронных сетях. DNNClassifier предназначен для нейронных сетей, вы найдете LinearRegressor для линейной и логистической регрессии. Я помещу свою ссылку на GitHub в конце этого поста, где я тренировался с использованием различных оценщиков tf.

classifier = tf.estimator.DNNClassifier(
    feature_columns=feature_columns, 
    hidden_units=hidden_units_spec, 
    n_classes=n_classes_spec,
    model_dir=tmp_dir_spec)

Определяя функцию ввода для обучения, она будет вызываться другой функцией для начала обучения.

train_input_fn = tf.estimator.inputs.pandas_input_fn(x=training_features,
                                    y=training_labels,
                                    num_epochs=epochs_spec,
                                    shuffle=True)

Теперь начинается собственно обучение. Он не выполнил все шаги, которые я определил ранее на моем компьютере, поэтому попробуйте выполнить несколько раз, чтобы получить меньше потерь.

# Train the model using the classifer. classifier.train(input_fn=train_input_fn, steps=steps_spec)

Хорошо! так и сделали с обучающей частью. Пришло время протестировать и оценить модель с данными тестирования, которые определены ранее.

# Define the test input function
test_input_fn = tf.estimator.inputs.pandas_input_fn(
                    x=testing_features, 
                    y=testing_labels, 
                    num_epochs=epochs_spec, 
                    shuffle=False)

Значения в матрице путаницы очень удобны и полезны, чтобы увидеть, насколько хороша ваша модель. Код ниже предназначен для матрицы путаницы. Это печатает AUC (площадь под кривой), точность, отзыв, потери, точность обучения, точность теста.

# Evaluate accuracy.
accuracy_score = classifier.evaluate(input_fn=test_input_fn)["accuracy"]
print("Accuracy = {}".format(accuracy_score))

Теперь давайте создадим набор прогнозов. Внимательно посмотрите, как я написал функции ввода и функции вывода. Меняйте соответственно.

# Create a prediction set -- this is a list of input features that you want to classify
prediction_set = pd.DataFrame({'recency':[2, 1], 'monetary':[4,3],'tinv':[3,2],'t':[5,4],'op':[4,5]})

Теперь давайте предскажем функцию ввода.

predict_input_fn = tf.estimator.inputs.pandas_input_fn(
                      x=prediction_set, 
                      num_epochs=1, 
                      shuffle=False)

Теперь давайте получим список прогнозируемых функций. Эти шаги становятся очень важными, когда вы действительно хотите использовать свою модель на своем Android-устройстве или любой другой платформе. Потому что для преобразования их в формат .tflite вам потребуются файлы .pbtxt, которые можно сгенерировать с помощью этих строк кода.

Хорошо! Вот и все! Вот и ваша первая нейронная сеть! Измените наборы данных, настройте параметры, наслаждайтесь! Если вам нужно больше кодов с оценками tf или с нуля, ссылка на GitHub находится ниже. Я обязательно буду обновлять его для всех моделей с разными алгоритмами. Https://github.com/kaiwalya4850.

Спасибо за чтение!