completed part 1 of deep learning
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,115 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Solutions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### One-hot encoding the rank"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Make dummy variables for rank\n",
|
||||
"one_hot_data = pd.concat([data, pd.get_dummies(data['rank'], prefix='rank')], axis=1)\n",
|
||||
"\n",
|
||||
"# Drop the previous rank column\n",
|
||||
"one_hot_data = one_hot_data.drop('rank', axis=1)\n",
|
||||
"\n",
|
||||
"# Print the first 10 rows of our data\n",
|
||||
"one_hot_data[:10]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Scaling the data"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Copying our data\n",
|
||||
"processed_data = one_hot_data[:]\n",
|
||||
"\n",
|
||||
"# Scaling the columns\n",
|
||||
"processed_data['gre'] = processed_data['gre']/800\n",
|
||||
"processed_data['gpa'] = processed_data['gpa']/4.0\n",
|
||||
"processed_data[:10]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Backpropagating the data"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def error_term_formula(x, y, output):\n",
|
||||
" return (y - output)*sigmoid_prime(x)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"## alternative solution ##\n",
|
||||
"# you could also *only* use y and the output \n",
|
||||
"# and calculate sigmoid_prime directly from the activated output!\n",
|
||||
"\n",
|
||||
"# below is an equally valid solution (it doesn't utilize x)\n",
|
||||
"def error_term_formula(x, y, output):\n",
|
||||
" return (y-output) * output * (1 - output)"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.6.3"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@@ -0,0 +1,181 @@
|
||||
# Importing pandas and numpy
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
# Reading the csv file into a pandas DataFrame
|
||||
data = pd.read_csv('student_data.csv')
|
||||
|
||||
# Printing out the first 10 rows of our data
|
||||
print(data[:10])
|
||||
|
||||
|
||||
# Importing matplotlib
|
||||
|
||||
# Function to help us plot
|
||||
def plot_points(data):
|
||||
X = np.array(data[["gre", "gpa"]])
|
||||
y = np.array(data["admit"])
|
||||
admitted = X[np.argwhere(y == 1)]
|
||||
rejected = X[np.argwhere(y == 0)]
|
||||
plt.scatter([s[0][0] for s in rejected], [s[0][1]
|
||||
for s in rejected],
|
||||
s=25, color='red', edgecolor='k')
|
||||
plt.scatter([s[0][0] for s in admitted], [s[0][1]
|
||||
for s in admitted],
|
||||
s=25, color='cyan', edgecolor='k')
|
||||
plt.xlabel('Test (GRE)')
|
||||
plt.ylabel('Grades (GPA)')
|
||||
|
||||
|
||||
# Plotting the points
|
||||
plot_points(data)
|
||||
plt.show()
|
||||
|
||||
|
||||
# Separating the ranks
|
||||
data_rank1 = data[data["rank"] == 1]
|
||||
data_rank2 = data[data["rank"] == 2]
|
||||
data_rank3 = data[data["rank"] == 3]
|
||||
data_rank4 = data[data["rank"] == 4]
|
||||
|
||||
# Plotting the graphs
|
||||
plot_points(data_rank1)
|
||||
plt.title("Rank 1")
|
||||
plt.show()
|
||||
plot_points(data_rank2)
|
||||
plt.title("Rank 2")
|
||||
plt.show()
|
||||
plot_points(data_rank3)
|
||||
plt.title("Rank 3")
|
||||
plt.show()
|
||||
plot_points(data_rank4)
|
||||
plt.title("Rank 4")
|
||||
plt.show()
|
||||
|
||||
|
||||
# TODO: Make dummy variables for rank
|
||||
one_hot_data = pd.concat([data, pd.get_dummies(data['rank'], prefix='rank')],
|
||||
axis=1)
|
||||
|
||||
# TODO: Drop the previous rank column
|
||||
one_hot_data = one_hot_data.drop('rank', axis=1)
|
||||
|
||||
# Print the first 10 rows of our data
|
||||
one_hot_data[:10]
|
||||
|
||||
|
||||
# Making a copy of our data
|
||||
processed_data = one_hot_data[:]
|
||||
|
||||
# TODO: Scale the columns
|
||||
processed_data['gre'] = processed_data['gre'] / 800
|
||||
processed_data['gpa'] = processed_data['gpa'] / 4.0
|
||||
processed_data[:10]
|
||||
|
||||
# Printing the first 10 rows of our procesed data
|
||||
processed_data[:10]
|
||||
|
||||
|
||||
sample = np.random.choice(processed_data.index, size=int(
|
||||
len(processed_data) * 0.9), replace=False)
|
||||
train_data, test_data = processed_data.iloc[sample], processed_data.drop(
|
||||
sample)
|
||||
|
||||
print("Number of training samples is", len(train_data))
|
||||
print("Number of testing samples is", len(test_data))
|
||||
print(train_data[:10])
|
||||
print(test_data[:10])
|
||||
|
||||
|
||||
features = train_data.drop('admit', axis=1)
|
||||
targets = train_data['admit']
|
||||
features_test = test_data.drop('admit', axis=1)
|
||||
targets_test = test_data['admit']
|
||||
|
||||
print(features[:10])
|
||||
print(targets[:10])
|
||||
|
||||
|
||||
# Activation (sigmoid) function
|
||||
def sigmoid(x):
|
||||
return 1 / (1 + np.exp(-x))
|
||||
|
||||
|
||||
def sigmoid_prime(x):
|
||||
return sigmoid(x) * (1 - sigmoid(x))
|
||||
|
||||
|
||||
def error_formula(y, output):
|
||||
return - y * np.log(output) - (1 - y) * np.log(1 - output)
|
||||
|
||||
|
||||
# TODO: Write the error term formula
|
||||
def error_term_formula(x, y, output):
|
||||
return (y - output) * sigmoid_prime(x)
|
||||
|
||||
|
||||
# Neural Network hyperparameters
|
||||
epochs = 1000
|
||||
learnrate = 0.5
|
||||
|
||||
# Training function
|
||||
|
||||
|
||||
def train_nn(features, targets, epochs, learnrate):
|
||||
|
||||
# Use to same seed to make debugging easier
|
||||
np.random.seed(42)
|
||||
|
||||
n_records, n_features = features.shape
|
||||
last_loss = None
|
||||
|
||||
# Initialize weights
|
||||
weights = np.random.normal(scale=1 / n_features**.5, size=n_features)
|
||||
|
||||
for e in range(epochs):
|
||||
del_w = np.zeros(weights.shape)
|
||||
for x, y in zip(features.values, targets):
|
||||
# Loop through all records, x is the input, y is the target
|
||||
|
||||
# Activation of the output unit
|
||||
# Notice we multiply the inputs and the weights here
|
||||
# rather than storing h as a separate variable
|
||||
output = sigmoid(np.dot(x, weights))
|
||||
|
||||
# The error, the target minus the network output
|
||||
error = error_formula(y, output)
|
||||
|
||||
# The error term
|
||||
error_term = error_term_formula(x, y, output)
|
||||
|
||||
# The gradient descent step, the error times the gradient times the inputs
|
||||
del_w += error_term * x
|
||||
|
||||
# Update the weights here. The learning rate times the
|
||||
# change in weights, divided by the number of records to average
|
||||
weights += learnrate * del_w / n_records
|
||||
|
||||
# Printing out the mean square error on the training set
|
||||
if e % (epochs / 10) == 0:
|
||||
out = sigmoid(np.dot(features, weights))
|
||||
loss = np.mean((out - targets) ** 2)
|
||||
print("Epoch:", e)
|
||||
if last_loss and last_loss < loss:
|
||||
print("Train loss: ", loss, " WARNING - Loss Increasing")
|
||||
else:
|
||||
print("Train loss: ", loss)
|
||||
last_loss = loss
|
||||
print("=========")
|
||||
print("Finished training!")
|
||||
return weights
|
||||
|
||||
|
||||
weights = train_nn(features, targets, epochs, learnrate)
|
||||
|
||||
|
||||
# Calculate accuracy on test data
|
||||
test_out = sigmoid(np.dot(features_test, weights))
|
||||
predictions = test_out > 0.5
|
||||
accuracy = np.mean(predictions == targets_test)
|
||||
print("Prediction accuracy: {:.3f}".format(accuracy))
|
||||
@@ -0,0 +1,401 @@
|
||||
admit,gre,gpa,rank
|
||||
0,380,3.61,3
|
||||
1,660,3.67,3
|
||||
1,800,4,1
|
||||
1,640,3.19,4
|
||||
0,520,2.93,4
|
||||
1,760,3,2
|
||||
1,560,2.98,1
|
||||
0,400,3.08,2
|
||||
1,540,3.39,3
|
||||
0,700,3.92,2
|
||||
0,800,4,4
|
||||
0,440,3.22,1
|
||||
1,760,4,1
|
||||
0,700,3.08,2
|
||||
1,700,4,1
|
||||
0,480,3.44,3
|
||||
0,780,3.87,4
|
||||
0,360,2.56,3
|
||||
0,800,3.75,2
|
||||
1,540,3.81,1
|
||||
0,500,3.17,3
|
||||
1,660,3.63,2
|
||||
0,600,2.82,4
|
||||
0,680,3.19,4
|
||||
1,760,3.35,2
|
||||
1,800,3.66,1
|
||||
1,620,3.61,1
|
||||
1,520,3.74,4
|
||||
1,780,3.22,2
|
||||
0,520,3.29,1
|
||||
0,540,3.78,4
|
||||
0,760,3.35,3
|
||||
0,600,3.4,3
|
||||
1,800,4,3
|
||||
0,360,3.14,1
|
||||
0,400,3.05,2
|
||||
0,580,3.25,1
|
||||
0,520,2.9,3
|
||||
1,500,3.13,2
|
||||
1,520,2.68,3
|
||||
0,560,2.42,2
|
||||
1,580,3.32,2
|
||||
1,600,3.15,2
|
||||
0,500,3.31,3
|
||||
0,700,2.94,2
|
||||
1,460,3.45,3
|
||||
1,580,3.46,2
|
||||
0,500,2.97,4
|
||||
0,440,2.48,4
|
||||
0,400,3.35,3
|
||||
0,640,3.86,3
|
||||
0,440,3.13,4
|
||||
0,740,3.37,4
|
||||
1,680,3.27,2
|
||||
0,660,3.34,3
|
||||
1,740,4,3
|
||||
0,560,3.19,3
|
||||
0,380,2.94,3
|
||||
0,400,3.65,2
|
||||
0,600,2.82,4
|
||||
1,620,3.18,2
|
||||
0,560,3.32,4
|
||||
0,640,3.67,3
|
||||
1,680,3.85,3
|
||||
0,580,4,3
|
||||
0,600,3.59,2
|
||||
0,740,3.62,4
|
||||
0,620,3.3,1
|
||||
0,580,3.69,1
|
||||
0,800,3.73,1
|
||||
0,640,4,3
|
||||
0,300,2.92,4
|
||||
0,480,3.39,4
|
||||
0,580,4,2
|
||||
0,720,3.45,4
|
||||
0,720,4,3
|
||||
0,560,3.36,3
|
||||
1,800,4,3
|
||||
0,540,3.12,1
|
||||
1,620,4,1
|
||||
0,700,2.9,4
|
||||
0,620,3.07,2
|
||||
0,500,2.71,2
|
||||
0,380,2.91,4
|
||||
1,500,3.6,3
|
||||
0,520,2.98,2
|
||||
0,600,3.32,2
|
||||
0,600,3.48,2
|
||||
0,700,3.28,1
|
||||
1,660,4,2
|
||||
0,700,3.83,2
|
||||
1,720,3.64,1
|
||||
0,800,3.9,2
|
||||
0,580,2.93,2
|
||||
1,660,3.44,2
|
||||
0,660,3.33,2
|
||||
0,640,3.52,4
|
||||
0,480,3.57,2
|
||||
0,700,2.88,2
|
||||
0,400,3.31,3
|
||||
0,340,3.15,3
|
||||
0,580,3.57,3
|
||||
0,380,3.33,4
|
||||
0,540,3.94,3
|
||||
1,660,3.95,2
|
||||
1,740,2.97,2
|
||||
1,700,3.56,1
|
||||
0,480,3.13,2
|
||||
0,400,2.93,3
|
||||
0,480,3.45,2
|
||||
0,680,3.08,4
|
||||
0,420,3.41,4
|
||||
0,360,3,3
|
||||
0,600,3.22,1
|
||||
0,720,3.84,3
|
||||
0,620,3.99,3
|
||||
1,440,3.45,2
|
||||
0,700,3.72,2
|
||||
1,800,3.7,1
|
||||
0,340,2.92,3
|
||||
1,520,3.74,2
|
||||
1,480,2.67,2
|
||||
0,520,2.85,3
|
||||
0,500,2.98,3
|
||||
0,720,3.88,3
|
||||
0,540,3.38,4
|
||||
1,600,3.54,1
|
||||
0,740,3.74,4
|
||||
0,540,3.19,2
|
||||
0,460,3.15,4
|
||||
1,620,3.17,2
|
||||
0,640,2.79,2
|
||||
0,580,3.4,2
|
||||
0,500,3.08,3
|
||||
0,560,2.95,2
|
||||
0,500,3.57,3
|
||||
0,560,3.33,4
|
||||
0,700,4,3
|
||||
0,620,3.4,2
|
||||
1,600,3.58,1
|
||||
0,640,3.93,2
|
||||
1,700,3.52,4
|
||||
0,620,3.94,4
|
||||
0,580,3.4,3
|
||||
0,580,3.4,4
|
||||
0,380,3.43,3
|
||||
0,480,3.4,2
|
||||
0,560,2.71,3
|
||||
1,480,2.91,1
|
||||
0,740,3.31,1
|
||||
1,800,3.74,1
|
||||
0,400,3.38,2
|
||||
1,640,3.94,2
|
||||
0,580,3.46,3
|
||||
0,620,3.69,3
|
||||
1,580,2.86,4
|
||||
0,560,2.52,2
|
||||
1,480,3.58,1
|
||||
0,660,3.49,2
|
||||
0,700,3.82,3
|
||||
0,600,3.13,2
|
||||
0,640,3.5,2
|
||||
1,700,3.56,2
|
||||
0,520,2.73,2
|
||||
0,580,3.3,2
|
||||
0,700,4,1
|
||||
0,440,3.24,4
|
||||
0,720,3.77,3
|
||||
0,500,4,3
|
||||
0,600,3.62,3
|
||||
0,400,3.51,3
|
||||
0,540,2.81,3
|
||||
0,680,3.48,3
|
||||
1,800,3.43,2
|
||||
0,500,3.53,4
|
||||
1,620,3.37,2
|
||||
0,520,2.62,2
|
||||
1,620,3.23,3
|
||||
0,620,3.33,3
|
||||
0,300,3.01,3
|
||||
0,620,3.78,3
|
||||
0,500,3.88,4
|
||||
0,700,4,2
|
||||
1,540,3.84,2
|
||||
0,500,2.79,4
|
||||
0,800,3.6,2
|
||||
0,560,3.61,3
|
||||
0,580,2.88,2
|
||||
0,560,3.07,2
|
||||
0,500,3.35,2
|
||||
1,640,2.94,2
|
||||
0,800,3.54,3
|
||||
0,640,3.76,3
|
||||
0,380,3.59,4
|
||||
1,600,3.47,2
|
||||
0,560,3.59,2
|
||||
0,660,3.07,3
|
||||
1,400,3.23,4
|
||||
0,600,3.63,3
|
||||
0,580,3.77,4
|
||||
0,800,3.31,3
|
||||
1,580,3.2,2
|
||||
1,700,4,1
|
||||
0,420,3.92,4
|
||||
1,600,3.89,1
|
||||
1,780,3.8,3
|
||||
0,740,3.54,1
|
||||
1,640,3.63,1
|
||||
0,540,3.16,3
|
||||
0,580,3.5,2
|
||||
0,740,3.34,4
|
||||
0,580,3.02,2
|
||||
0,460,2.87,2
|
||||
0,640,3.38,3
|
||||
1,600,3.56,2
|
||||
1,660,2.91,3
|
||||
0,340,2.9,1
|
||||
1,460,3.64,1
|
||||
0,460,2.98,1
|
||||
1,560,3.59,2
|
||||
0,540,3.28,3
|
||||
0,680,3.99,3
|
||||
1,480,3.02,1
|
||||
0,800,3.47,3
|
||||
0,800,2.9,2
|
||||
1,720,3.5,3
|
||||
0,620,3.58,2
|
||||
0,540,3.02,4
|
||||
0,480,3.43,2
|
||||
1,720,3.42,2
|
||||
0,580,3.29,4
|
||||
0,600,3.28,3
|
||||
0,380,3.38,2
|
||||
0,420,2.67,3
|
||||
1,800,3.53,1
|
||||
0,620,3.05,2
|
||||
1,660,3.49,2
|
||||
0,480,4,2
|
||||
0,500,2.86,4
|
||||
0,700,3.45,3
|
||||
0,440,2.76,2
|
||||
1,520,3.81,1
|
||||
1,680,2.96,3
|
||||
0,620,3.22,2
|
||||
0,540,3.04,1
|
||||
0,800,3.91,3
|
||||
0,680,3.34,2
|
||||
0,440,3.17,2
|
||||
0,680,3.64,3
|
||||
0,640,3.73,3
|
||||
0,660,3.31,4
|
||||
0,620,3.21,4
|
||||
1,520,4,2
|
||||
1,540,3.55,4
|
||||
1,740,3.52,4
|
||||
0,640,3.35,3
|
||||
1,520,3.3,2
|
||||
1,620,3.95,3
|
||||
0,520,3.51,2
|
||||
0,640,3.81,2
|
||||
0,680,3.11,2
|
||||
0,440,3.15,2
|
||||
1,520,3.19,3
|
||||
1,620,3.95,3
|
||||
1,520,3.9,3
|
||||
0,380,3.34,3
|
||||
0,560,3.24,4
|
||||
1,600,3.64,3
|
||||
1,680,3.46,2
|
||||
0,500,2.81,3
|
||||
1,640,3.95,2
|
||||
0,540,3.33,3
|
||||
1,680,3.67,2
|
||||
0,660,3.32,1
|
||||
0,520,3.12,2
|
||||
1,600,2.98,2
|
||||
0,460,3.77,3
|
||||
1,580,3.58,1
|
||||
1,680,3,4
|
||||
1,660,3.14,2
|
||||
0,660,3.94,2
|
||||
0,360,3.27,3
|
||||
0,660,3.45,4
|
||||
0,520,3.1,4
|
||||
1,440,3.39,2
|
||||
0,600,3.31,4
|
||||
1,800,3.22,1
|
||||
1,660,3.7,4
|
||||
0,800,3.15,4
|
||||
0,420,2.26,4
|
||||
1,620,3.45,2
|
||||
0,800,2.78,2
|
||||
0,680,3.7,2
|
||||
0,800,3.97,1
|
||||
0,480,2.55,1
|
||||
0,520,3.25,3
|
||||
0,560,3.16,1
|
||||
0,460,3.07,2
|
||||
0,540,3.5,2
|
||||
0,720,3.4,3
|
||||
0,640,3.3,2
|
||||
1,660,3.6,3
|
||||
1,400,3.15,2
|
||||
1,680,3.98,2
|
||||
0,220,2.83,3
|
||||
0,580,3.46,4
|
||||
1,540,3.17,1
|
||||
0,580,3.51,2
|
||||
0,540,3.13,2
|
||||
0,440,2.98,3
|
||||
0,560,4,3
|
||||
0,660,3.67,2
|
||||
0,660,3.77,3
|
||||
1,520,3.65,4
|
||||
0,540,3.46,4
|
||||
1,300,2.84,2
|
||||
1,340,3,2
|
||||
1,780,3.63,4
|
||||
1,480,3.71,4
|
||||
0,540,3.28,1
|
||||
0,460,3.14,3
|
||||
0,460,3.58,2
|
||||
0,500,3.01,4
|
||||
0,420,2.69,2
|
||||
0,520,2.7,3
|
||||
0,680,3.9,1
|
||||
0,680,3.31,2
|
||||
1,560,3.48,2
|
||||
0,580,3.34,2
|
||||
0,500,2.93,4
|
||||
0,740,4,3
|
||||
0,660,3.59,3
|
||||
0,420,2.96,1
|
||||
0,560,3.43,3
|
||||
1,460,3.64,3
|
||||
1,620,3.71,1
|
||||
0,520,3.15,3
|
||||
0,620,3.09,4
|
||||
0,540,3.2,1
|
||||
1,660,3.47,3
|
||||
0,500,3.23,4
|
||||
1,560,2.65,3
|
||||
0,500,3.95,4
|
||||
0,580,3.06,2
|
||||
0,520,3.35,3
|
||||
0,500,3.03,3
|
||||
0,600,3.35,2
|
||||
0,580,3.8,2
|
||||
0,400,3.36,2
|
||||
0,620,2.85,2
|
||||
1,780,4,2
|
||||
0,620,3.43,3
|
||||
1,580,3.12,3
|
||||
0,700,3.52,2
|
||||
1,540,3.78,2
|
||||
1,760,2.81,1
|
||||
0,700,3.27,2
|
||||
0,720,3.31,1
|
||||
1,560,3.69,3
|
||||
0,720,3.94,3
|
||||
1,520,4,1
|
||||
1,540,3.49,1
|
||||
0,680,3.14,2
|
||||
0,460,3.44,2
|
||||
1,560,3.36,1
|
||||
0,480,2.78,3
|
||||
0,460,2.93,3
|
||||
0,620,3.63,3
|
||||
0,580,4,1
|
||||
0,800,3.89,2
|
||||
1,540,3.77,2
|
||||
1,680,3.76,3
|
||||
1,680,2.42,1
|
||||
1,620,3.37,1
|
||||
0,560,3.78,2
|
||||
0,560,3.49,4
|
||||
0,620,3.63,2
|
||||
1,800,4,2
|
||||
0,640,3.12,3
|
||||
0,540,2.7,2
|
||||
0,700,3.65,2
|
||||
1,540,3.49,2
|
||||
0,540,3.51,2
|
||||
0,660,4,1
|
||||
1,480,2.62,2
|
||||
0,420,3.02,1
|
||||
1,740,3.86,2
|
||||
0,580,3.36,2
|
||||
0,640,3.17,2
|
||||
0,640,3.51,2
|
||||
1,800,3.05,2
|
||||
1,660,3.88,2
|
||||
1,600,3.38,3
|
||||
1,620,3.75,2
|
||||
1,460,3.99,3
|
||||
0,620,4,2
|
||||
0,560,3.04,3
|
||||
0,460,2.63,2
|
||||
0,700,3.65,2
|
||||
0,600,3.89,3
|
||||
|
Reference in New Issue
Block a user