Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tensorflow as tf
- from tensorflow import keras
- from sklearn.model_selection import train_test_split
- from random import random
- import numpy as np
- targets = []
- inputs = []
- CLASS_A = 0
- CLASS_B = 1
- def sort_by_probability(pair):
- return pair[0]
- def create_model(input_count):
- model = keras.Sequential([
- keras.layers.Dense(3, input_dim=input_count, activation=tf.nn.relu),
- keras.layers.Dense(3, activation=tf.nn.relu, kernel_regularizer=keras.regularizers.l2(0.0000)),
- keras.layers.Dense(1, activation=tf.nn.sigmoid, kernel_regularizer=keras.regularizers.l2(0.00000))
- ])
- model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
- return model
- def assess_accuracy(model, targets_validation, inputs_validation):
- predictions = [(float(v[0]), targets_validation[i], inputs_validation[i]) for i, v in enumerate(model.predict(np.asarray(inputs_validation, dtype=np.float32)))]
- predictions.sort(key=sort_by_probability)
- predictions.reverse()
- correct = 0
- for pair in predictions[:100]:
- if(pair[1] == CLASS_B):
- correct += 1
- print(str(correct) + "% correct")
- for v in range(0, 100000):
- target = CLASS_A if random() < 0.8 else CLASS_B
- feature = [0.45 + 0.1 * random()] if random() < 0.2 and target == CLASS_B else [random()]
- targets.append(target)
- inputs.append(feature)
- inputs_training, inputs_validation, targets_training, targets_validation = train_test_split(inputs, targets, test_size=0.3, random_state=42)
- model = create_model(1)
- model.fit(np.array(inputs_training), np.array(targets_training), epochs=10, verbose=0, class_weight = {0:1, 1:4})
- print("With one feature")
- assess_accuracy(model, targets_validation, inputs_validation)
- print("Now with three features, each equally meaningful as the first one")
- inputs = []
- targets = []
- for v in range(0, 100000):
- target = CLASS_A if random() < 0.8 else CLASS_B
- featureA = 0.45 + 0.1 * random() if random() < 0.2 and target == CLASS_B else random()
- featureB = 0.45 + 0.1 * random() if random() < 0.2 and target == CLASS_B else random()
- featureC = 0.45 + 0.1 * random() if random() < 0.2 and target == CLASS_B else random()
- targets.append(target)
- inputs.append([featureA, featureB, featureC])
- inputs_training, inputs_validation, targets_training, targets_validation = train_test_split(inputs, targets, test_size=0.3, random_state=42)
- model = create_model(3)
- model.fit(np.array(inputs_training), np.array(targets_training), epochs=10, verbose=0, class_weight = {0:1, 1:4})
- assess_accuracy(model, targets_validation, inputs_validation)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement