<jupyter_start><jupyter_text><jupyter_code>!pip install seaborn
from __future__ import absolute_import, division, print_function, unicode_literals

import pathlib

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

try:
  # Colab only
  %tensorflow_version 2.x
except Exception:
    pass
import tensorflow as tf

from tensorflow import keras
from tensorflow.keras import layers

print(tf.__version__)<jupyter_output><empty_output><jupyter_text>Use tripadvisor.csv in next cell!!!<jupyter_code>from google.colab import files
file = files.upload()
column_names = ['уникальный идентификатор пользователя','средний отклик пользователя на художественные галереи','средний отклик пользователя на танцевальные клубы','усредненный отзыв пользователя на соковых барах','усредненный отзыв пользователя на рестораны',
                'усредненный отзыв пользователя на музеи', 'средняя оценка пользователей на курортах', 'средняя оценка пользователей парков и мест для пикников', 'средняя оценка пользователей пляжей', 'средняя оценка пользователей театров', 'средняя оценка пользователей религиозных учреждений']
raw_dataset = pd.read_csv("tripadvisor_review.csv", names=column_names,
                      na_values = "?", comment='\t',
                      sep=",", skipinitialspace=True)

dataset = raw_dataset.copy()
dataset.tail()
dataset.isna().sum()
dataset = dataset.dropna()
dataset.pop("уникальный идентификатор пользователя")
dataset.tail()
train_dataset = dataset.sample(frac=0.8,random_state=0)
test_dataset = dataset.drop(train_dataset.index)
train_dataset.tail()
sns.pairplot(train_dataset[["средний отклик пользователя на художественные галереи", "средний отклик пользователя на танцевальные клубы", "усредненный отзыв пользователя на музеи"]], diag_kind="kde")
train_stats = train_dataset.describe()
train_stats.pop("средний отклик пользователя на художественные галереи")
train_stats = train_stats.transpose()
train_stats
train_labels = train_dataset.pop('средний отклик пользователя на художественные галереи')
test_labels = test_dataset.pop('средний отклик пользователя на художественные галереи')
def norm(x):
  return (x - train_stats['mean']) / train_stats['std']
normed_train_data = norm(train_dataset)
normed_test_data = norm(test_dataset)
def build_model():
  model = keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=[len(train_dataset.keys())]),
    layers.Dense(64, activation='relu'),
    layers.Dense(1)
  ])

  optimizer = tf.keras.optimizers.RMSprop(0.001)

  model.compile(loss='mse',
                optimizer=optimizer,
                metrics=['mae', 'mse'])
  return model
model = build_model()
model.summary()
example_batch = train_dataset[:10]
example_result = model.predict(example_batch)
example_result
# Выведем прогресс обучения в виде точек после каждой завершенной эпохи
class PrintDot(keras.callbacks.Callback):
  def on_epoch_end(self, epoch, logs):
    if epoch % 100 == 0: print('')
    print('.', end='')

EPOCHS = 1000

history = model.fit(
  train_dataset, train_labels,
  epochs=EPOCHS, validation_split = 0.2, verbose=0,
  callbacks=[PrintDot()])
hist = pd.DataFrame(history.history)
hist['epoch'] = history.epoch
hist.tail()
def plot_history(history):
  hist = pd.DataFrame(history.history)
  hist['epoch'] = history.epoch

  plt.figure()
  plt.xlabel('Epoch')
  plt.ylabel('Mean Abs Error [MPG]')
  plt.plot(hist['epoch'], hist['mae'],
           label='Train Error')
  plt.plot(hist['epoch'], hist['val_mae'],
           label = 'Val Error')
  plt.ylim([0,5])
  plt.legend()

  plt.figure()
  plt.xlabel('Epoch')
  plt.ylabel('Mean Square Error [$MPG^2$]')
  plt.plot(hist['epoch'], hist['mse'],
           label='Train Error')
  plt.plot(hist['epoch'], hist['val_mse'],
           label = 'Val Error')
  plt.ylim([0,20])
  plt.legend()
  plt.show()


plot_history(history)
model = build_model()

# Параметр patience определяет количество эпох, проверяемых на улучшение
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10)

history = model.fit(normed_train_data, train_labels, epochs=EPOCHS,
                    validation_split = 0.2, verbose=0, callbacks=[early_stop, PrintDot()])

plot_history(history)
loss, mae, mse = model.evaluate(normed_test_data, test_labels, verbose=2)

print("Testing set Mean Abs Error: {:5.2f} баллов".format(mae))
test_predictions = model.predict(normed_test_data).flatten()

plt.scatter(test_labels, test_predictions)
plt.xlabel('True Values except')
plt.ylabel('Predictions ]')
plt.axis('equal')
plt.axis('square')
plt.xlim([0,plt.xlim()[1]])
plt.ylim([0,plt.ylim()[1]])
_ = plt.plot([-100, 100], [-100, 100])

error = test_predictions - test_labels
plt.hist(error, bins = 25)
plt.xlabel("Prediction Error ")
_ = plt.ylabel("Count")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1288445552784705, 'fraction_numerical': 0.012053200332502078, 'mean_word_length': 5.3748344370860925, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '416506', 'license': 'Apache-2.0', 'n_tokens_mistral': 1770, 'n_tokens_neox': 1818, 'n_words': 351, 'path': 'MyFirstNeuronet.ipynb', 'repo_name': 'Hvendrix/MyFirstNeuronet', 'size': '4812'}