import numpy as np
def mean_normalization( Dataset) :
max_first = np.max ( Dataset[ :, 1 ] )
max_second = np.max ( Dataset[ :, 2 ] )
min_first = np.min ( Dataset[ :, 1 ] )
min_second = np.min ( Dataset[ :, 2 ] )
mean_first = np.mean ( Dataset[ :, 1 ] )
mean_second = np.mean ( Dataset[ :, 2 ] )
for data in Dataset:
data[ 1 ] = ( data[ 1 ] - mean_first) / ( max_first - min_first)
data[ 2 ] = ( data[ 2 ] - mean_second) / ( max_second - min_second)
return Dataset, [ max_first, min_first, mean_first, max_second, min_second, mean_second]
def sigmoid( x) :
return 1 / ( 1 + np.exp ( -x) )
# Call for each training set, Individually.
def compute_cost( X, y, theta) :
m = len ( y)
h = sigmoid( np.dot ( X, theta) )
cost = ( 1 / m) * ( np.dot ( -y.T , np.log ( h) ) - np.dot ( ( 1 - y) .T , np.log ( 1 - h) ) )
return cost
# Call for each training set, Individually.
def gradient_descent( X, y, theta, learning_rate, num_iterations) :
m = len ( y)
cost_history = [ ]
for i in range ( num_iterations) :
theta = theta - ( learning_rate / m) * ( X.T @ ( sigmoid( X @ theta) - y) )
cost_history.append ( [ compute_cost( X, y, theta) ] )
return cost_history, theta
def prediction( data, optimum_theta) :
data[ 1 ] = ( data[ 1 ] - max_min_list[ 2 ] ) / ( max_min_list[ 0 ] - max_min_list[ 1 ] )
data[ 2 ] = ( data[ 2 ] - max_min_list[ 5 ] ) / ( max_min_list[ 3 ] - max_min_list[ 4 ] )
sigmoid_value = sigmoid( data @ optimum_theta)
if sigmoid_value >= 0.5 :
print ( "Student will be admitted." )
else :
print ( "Student will be rejected." )
def initial_data( ) :
dataset = np.loadtxt ( "Datasets/data1.txt" , dtype= str )
Dataset = [ ]
result = [ ]
for data in dataset:
data = data.split ( "," )
Dataset.append ( [ 1 , float ( data[ 0 ] ) , float ( data[ 1 ] ) ] )
result.append ( [ float ( data[ 2 ] ) ] )
Dataset = np.array ( Dataset, dtype= np.float64 )
result = np.array ( result, dtype= np.float64 )
Dataset, max_min_list = mean_normalization( Dataset)
return Dataset, result, max_min_list
def accuracy( X, y, theta, cutoff) :
pred = [ sigmoid( np.dot ( X, theta) ) >= cutoff]
acc = np.mean ( pred == y)
print ( acc * 100 )
X, y, max_min_list = initial_data( )
m, n = X.shape
learning_rate = 0.1
num_iterations = 400
theta = np.zeros ( ( n, 1 ) )
cost_history, optimum_theta = gradient_descent( X, y, theta, learning_rate, num_iterations)
predict = np.array ( [ 1 , 82.3 , 93.3 ] )
prediction( predict, optimum_theta)
aW1wb3J0IG51bXB5IGFzIG5wCgoKZGVmIG1lYW5fbm9ybWFsaXphdGlvbihEYXRhc2V0KToKICAgIG1heF9maXJzdCA9IG5wLm1heChEYXRhc2V0WzosIDFdKQogICAgbWF4X3NlY29uZCA9IG5wLm1heChEYXRhc2V0WzosIDJdKQogICAgbWluX2ZpcnN0ID0gbnAubWluKERhdGFzZXRbOiwgMV0pCiAgICBtaW5fc2Vjb25kID0gbnAubWluKERhdGFzZXRbOiwgMl0pCiAgICBtZWFuX2ZpcnN0ID0gbnAubWVhbihEYXRhc2V0WzosIDFdKQogICAgbWVhbl9zZWNvbmQgPSBucC5tZWFuKERhdGFzZXRbOiwgMl0pCiAgICBmb3IgZGF0YSBpbiBEYXRhc2V0OgogICAgICAgIGRhdGFbMV0gPSAoZGF0YVsxXSAtIG1lYW5fZmlyc3QpIC8gKG1heF9maXJzdCAtIG1pbl9maXJzdCkKICAgICAgICBkYXRhWzJdID0gKGRhdGFbMl0gLSBtZWFuX3NlY29uZCkgLyAobWF4X3NlY29uZCAtIG1pbl9zZWNvbmQpCiAgICByZXR1cm4gRGF0YXNldCwgW21heF9maXJzdCwgbWluX2ZpcnN0LCBtZWFuX2ZpcnN0LCBtYXhfc2Vjb25kLCBtaW5fc2Vjb25kLCBtZWFuX3NlY29uZF0KCgpkZWYgc2lnbW9pZCh4KToKICAgIHJldHVybiAxIC8gKDEgKyBucC5leHAoLXgpKQoKCiMgQ2FsbCBmb3IgZWFjaCB0cmFpbmluZyBzZXQsIEluZGl2aWR1YWxseS4KCmRlZiBjb21wdXRlX2Nvc3QoWCwgeSwgdGhldGEpOgogICAgbSA9IGxlbih5KQogICAgaCA9IHNpZ21vaWQobnAuZG90KFgsIHRoZXRhKSkKICAgIGNvc3QgPSAoMSAvIG0pICogKG5wLmRvdCgteS5ULCBucC5sb2coaCkpIC0gbnAuZG90KCgxIC0geSkuVCwgbnAubG9nKDEgLSBoKSkpCiAgICByZXR1cm4gY29zdAoKCiMgQ2FsbCBmb3IgZWFjaCB0cmFpbmluZyBzZXQsIEluZGl2aWR1YWxseS4KCgpkZWYgZ3JhZGllbnRfZGVzY2VudChYLCB5LCB0aGV0YSwgbGVhcm5pbmdfcmF0ZSwgbnVtX2l0ZXJhdGlvbnMpOgogICAgbSA9IGxlbih5KQogICAgY29zdF9oaXN0b3J5ID0gW10KICAgIGZvciBpIGluIHJhbmdlKG51bV9pdGVyYXRpb25zKToKICAgICAgICB0aGV0YSA9IHRoZXRhIC0gKGxlYXJuaW5nX3JhdGUgLyBtKSAqIChYLlQgQCAoc2lnbW9pZChYIEAgdGhldGEpIC0geSkpCiAgICAgICAgY29zdF9oaXN0b3J5LmFwcGVuZChbY29tcHV0ZV9jb3N0KFgsIHksIHRoZXRhKV0pCiAgICByZXR1cm4gY29zdF9oaXN0b3J5LCB0aGV0YQoKCmRlZiBwcmVkaWN0aW9uKGRhdGEsIG9wdGltdW1fdGhldGEpOgogICAgZGF0YVsxXSA9IChkYXRhWzFdIC0gbWF4X21pbl9saXN0WzJdKSAvIChtYXhfbWluX2xpc3RbMF0gLSBtYXhfbWluX2xpc3RbMV0pCiAgICBkYXRhWzJdID0gKGRhdGFbMl0gLSBtYXhfbWluX2xpc3RbNV0pIC8gKG1heF9taW5fbGlzdFszXSAtIG1heF9taW5fbGlzdFs0XSkKICAgIHNpZ21vaWRfdmFsdWUgPSBzaWdtb2lkKGRhdGEgQCBvcHRpbXVtX3RoZXRhKQogICAgaWYgc2lnbW9pZF92YWx1ZSA+PSAwLjU6CiAgICAgICAgcHJpbnQoIlN0dWRlbnQgd2lsbCBiZSBhZG1pdHRlZC4iKQogICAgZWxzZToKICAgICAgICBwcmludCgiU3R1ZGVudCB3aWxsIGJlIHJlamVjdGVkLiIpCgoKZGVmIGluaXRpYWxfZGF0YSgpOgogICAgZGF0YXNldCA9IG5wLmxvYWR0eHQoIkRhdGFzZXRzL2RhdGExLnR4dCIsIGR0eXBlPXN0cikKICAgIERhdGFzZXQgPSBbXQogICAgcmVzdWx0ID0gW10KCiAgICBmb3IgZGF0YSBpbiBkYXRhc2V0OgogICAgICAgIGRhdGEgPSBkYXRhLnNwbGl0KCIsIikKICAgICAgICBEYXRhc2V0LmFwcGVuZChbMSwgZmxvYXQoZGF0YVswXSksIGZsb2F0KGRhdGFbMV0pXSkKICAgICAgICByZXN1bHQuYXBwZW5kKFtmbG9hdChkYXRhWzJdKV0pCiAgICBEYXRhc2V0ID0gbnAuYXJyYXkoRGF0YXNldCwgZHR5cGU9bnAuZmxvYXQ2NCkKICAgIHJlc3VsdCA9IG5wLmFycmF5KHJlc3VsdCwgZHR5cGU9bnAuZmxvYXQ2NCkKICAgIERhdGFzZXQsIG1heF9taW5fbGlzdCA9IG1lYW5fbm9ybWFsaXphdGlvbihEYXRhc2V0KQogICAgcmV0dXJuIERhdGFzZXQsIHJlc3VsdCwgbWF4X21pbl9saXN0CgoKZGVmIGFjY3VyYWN5KFgsIHksIHRoZXRhLCBjdXRvZmYpOgogICAgcHJlZCA9IFtzaWdtb2lkKG5wLmRvdChYLCB0aGV0YSkpID49IGN1dG9mZl0KICAgIGFjYyA9IG5wLm1lYW4ocHJlZCA9PSB5KQogICAgcHJpbnQoYWNjICogMTAwKQoKClgsIHksIG1heF9taW5fbGlzdCA9IGluaXRpYWxfZGF0YSgpCm0sIG4gPSBYLnNoYXBlCmxlYXJuaW5nX3JhdGUgPSAwLjEKbnVtX2l0ZXJhdGlvbnMgPSA0MDAKdGhldGEgPSBucC56ZXJvcygobiwgMSkpCmNvc3RfaGlzdG9yeSwgb3B0aW11bV90aGV0YSA9IGdyYWRpZW50X2Rlc2NlbnQoWCwgeSwgdGhldGEsIGxlYXJuaW5nX3JhdGUsIG51bV9pdGVyYXRpb25zKQpwcmVkaWN0ID0gbnAuYXJyYXkoWzEsIDgyLjMsIDkzLjNdKQpwcmVkaWN0aW9uKHByZWRpY3QsIG9wdGltdW1fdGhldGEpCgo=