# # __author__ = 'Sony'
import sys
import scipy.optimize , scipy.special
from numpy import *
from matplotlib import pyplot, cm
from mpl_toolkits.mplot3d import Axes3D
# EX_DIRECTORY_PATH = 'C:\Users\Sony\OneDrive\#my lab\NeuralNets'
def plot_samples( data, theta = None , test = None ) :
X, y = data[ :, 0 ] , data[ :, 1 ]
pyplot.xlabel ( "X - axis" )
pyplot.ylabel ( "Y - axis" )
pyplot.plot ( X, y, 'rx' , markersize= 5 )
if theta is not None : #plot data set with the theta calculated using gradient decs
y = theta[ 0 ] + theta[ 1 ] *X
pyplot.plot ( X, y)
if test is not None : #test case for prediction
y = test [ :, :] .dot ( theta)
pyplot.plot ( test [ :, 1 ] , y, 'yo' , markersize= 10 )
pyplot.show ( )
pyplot.close ( )
def cost( theta, data ) :
X, y = data[ :, 0 ] , data[ :, 1 ]
m = shape( X) [ 0 ]
y = y.reshape ( m, 1 )
X = c_[ ones( ( m, 1 ) ) , X]
J = X.dot ( theta) - y
# print((J.T.dot(J) / (2*m)) [0, 0])
return ( J.T .dot ( J) / ( 2 *m) ) [ 0 , 0 ]
def gradDesc( theta, data, alpha = None , iterations = None ) :
X = data[ :, 0 ]
y = data[ :, 1 ]
m = shape( X) [ 0 ]
X = c_[ ones( ( m, 1 ) ) , X]
y = y.reshape ( m, 1 )
hypo = X.dot ( theta)
grad = zeros( ( 2 , 1 ) )
if alpha is not None : #"""iterative method"""
for i in range ( 0 , iterations) :
hypo = X.dot ( grad)
ausi = X.T .dot ( hypo - y)
grad -= alpha / m * ausi
else : #returns derivative of cost(), to use fmin_cg in run()
grad = X.T .dot ( hypo.reshape ( m, 1 ) - y) /m
# print(grad)
return grad.flatten ( )
def run( theta, data ) :
result = scipy.optimize .fmin_cg ( cost, fprime= gradDesc, x0= theta, \
args = ( data, ) , maxiter= 1 , disp= False , full_output= True )
theta = result[ 0 ]
minCost = result[ 1 ]
return theta, minCost
def iterative_gradDesc( data, theta) :
alpha = 0.01
iterations = 1500
return gradDesc( theta, data, alpha, iterations)
def main( ) :
data = genfromtxt( "in.txt" , delimiter= ',' )
theta = zeros( ( 2 , 1 ) )
plot_samples( data)
theta, costy = run( theta, data)
# theta = iterative_gradDesc(data, theta)
test = array ( ( [ 1 , 20 ] , [ 1 , 10 ] , [ 1 , 13 ] ) )
plot_samples( data, theta, test )
# theta0_vals = linspace(-10, 10, 500)
# theta1_vals = linspace(-4, 4, 500)
#
# J_vals = zeros((len(theta0_vals), len(theta1_vals)), dtype=float64)
# for i, v0 in enumerate(theta0_vals):
# for j, v1 in enumerate(theta1_vals):
# theta = array((theta0_vals[i], theta1_vals[j])).reshape(2, 1)
# J_vals[i, j] = cost(theta, data)
#
# R, P = meshgrid(theta0_vals, theta1_vals)
#
# fig = pyplot.figure()
# ax = fig.gca(projection='3d')
# ax.plot_surface(R, P, J_vals)
# pyplot.show(block=True)
if __name__ == '__main__' :
main( )
IyAjIF9fYXV0aG9yX18gPSAnU29ueScKaW1wb3J0IHN5cwppbXBvcnQgc2NpcHkub3B0aW1pemUsIHNjaXB5LnNwZWNpYWwKZnJvbSBudW1weSBpbXBvcnQgKgpmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCwgY20KZnJvbSBtcGxfdG9vbGtpdHMubXBsb3QzZCBpbXBvcnQgQXhlczNECgojIEVYX0RJUkVDVE9SWV9QQVRIID0gJ0M6XFVzZXJzXFNvbnlcT25lRHJpdmVcI215IGxhYlxOZXVyYWxOZXRzJwoKZGVmIHBsb3Rfc2FtcGxlcyhkYXRhLCB0aGV0YSA9IE5vbmUsIHRlc3QgPSBOb25lKToKICAgIFgsIHkgPSBkYXRhWzosIDBdLCBkYXRhWzosIDFdCiAgICBweXBsb3QueGxhYmVsKCJYIC0gYXhpcyIpCiAgICBweXBsb3QueWxhYmVsKCJZIC0gYXhpcyIpCiAgICBweXBsb3QucGxvdChYLCB5LCAncngnLCBtYXJrZXJzaXplPTUgKQoKICAgIGlmIHRoZXRhIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAgICAgICNwbG90IGRhdGEgc2V0IHdpdGggdGhlIHRoZXRhIGNhbGN1bGF0ZWQgdXNpbmcgZ3JhZGllbnQgZGVjcwogICAgICAgIHkgPSB0aGV0YVswXSArIHRoZXRhWzFdKlgKICAgICAgICBweXBsb3QucGxvdChYLCB5KQogICAgICAgIGlmIHRlc3QgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICAgICN0ZXN0IGNhc2UgZm9yIHByZWRpY3Rpb24KICAgICAgICAgICAgeSA9IHRlc3RbOiwgOl0uZG90KHRoZXRhKQogICAgICAgICAgICBweXBsb3QucGxvdCh0ZXN0WzosIDFdLCB5LCAneW8nLCBtYXJrZXJzaXplPTEwICkKCiAgICBweXBsb3Quc2hvdygpCiAgICBweXBsb3QuY2xvc2UoKQoKZGVmIGNvc3QoIHRoZXRhLCBkYXRhICk6CiAgICBYLCB5ID0gZGF0YVs6LCAwXSwgZGF0YVs6LCAxXQogICAgbSA9IHNoYXBlKFgpWzBdCiAgICB5IAkgPSB5LnJlc2hhcGUobSwgMSkKICAgIFggPSBjX1tvbmVzKChtLCAxKSksIFhdCgogICAgSiA9IFguZG90KHRoZXRhKSAtIHkKICAgICMgcHJpbnQoKEouVC5kb3QoSikgLyAoMiptKSkgWzAsIDBdKQoKICAgIHJldHVybiAgKEouVC5kb3QoSikgLyAoMiptKSkgWzAsIDBdCgpkZWYgZ3JhZERlc2ModGhldGEsIGRhdGEsIGFscGhhID0gTm9uZSwgaXRlcmF0aW9ucyA9IE5vbmUpOgogICAgWCA9IGRhdGFbOiwgMF0KICAgIHkgID0gZGF0YVs6LCAxXQogICAgbSA9IHNoYXBlKFgpWzBdCiAgICBYID0gY19bb25lcygobSwgMSkpLCBYXQogICAgeSAJID0geS5yZXNoYXBlKG0sIDEpCiAgICBoeXBvID0gWC5kb3QodGhldGEpCgogICAgZ3JhZCA9IHplcm9zKCgyLCAxKSkKICAgIGlmIGFscGhhICBpcyBub3QgTm9uZSA6ICAgICAgICAgICAgICAgICAgICAgICAgICMiIiJpdGVyYXRpdmUgbWV0aG9kIiIiCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UgKDAsIGl0ZXJhdGlvbnMpOgogICAgICAgICAgICBoeXBvID0gWC5kb3QoZ3JhZCkKICAgICAgICAgICAgYXVzaSA9IFguVC5kb3QoaHlwbyAtIHkpCiAgICAgICAgICAgIGdyYWQgLT0gYWxwaGEgLyBtICogYXVzaQogICAgZWxzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcmV0dXJucyBkZXJpdmF0aXZlIG9mIGNvc3QoKSwgdG8gdXNlIGZtaW5fY2cgaW4gcnVuKCkKICAgICAgICBncmFkID0gWC5ULmRvdChoeXBvLnJlc2hhcGUobSwgMSkgLSB5KS9tCiAgICAjIHByaW50KGdyYWQpCiAgICByZXR1cm4gZ3JhZC5mbGF0dGVuKCkKCmRlZiBydW4odGhldGEsIGRhdGEgKToKICAgIHJlc3VsdCAJPSBzY2lweS5vcHRpbWl6ZS5mbWluX2NnKCBjb3N0LCBmcHJpbWU9Z3JhZERlc2MsIHgwPXRoZXRhLCAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IChkYXRhLCApLCBtYXhpdGVyPTEsIGRpc3A9RmFsc2UsIGZ1bGxfb3V0cHV0PVRydWUgKQogICAgdGhldGEgPSByZXN1bHRbMF0KICAgIG1pbkNvc3QgPSByZXN1bHRbMV0KICAgIHJldHVybiB0aGV0YSwgbWluQ29zdAoKZGVmIGl0ZXJhdGl2ZV9ncmFkRGVzYyhkYXRhLCB0aGV0YSk6CiAgICBhbHBoYSA9IDAuMDEKICAgIGl0ZXJhdGlvbnMgPSAxNTAwCgogICAgcmV0dXJuIGdyYWREZXNjKHRoZXRhLCBkYXRhLCBhbHBoYSwgaXRlcmF0aW9ucykKCmRlZiBtYWluKCk6CiAgICBkYXRhID0gZ2VuZnJvbXR4dCgiaW4udHh0IiwgZGVsaW1pdGVyPScsJykKICAgIHRoZXRhID0gemVyb3MoKDIsIDEpKQogICAgcGxvdF9zYW1wbGVzKGRhdGEpCiAgICB0aGV0YSwgY29zdHkgPSBydW4odGhldGEsIGRhdGEpCiAgICAjIHRoZXRhID0gaXRlcmF0aXZlX2dyYWREZXNjKGRhdGEsIHRoZXRhKQogICAgdGVzdCA9IGFycmF5KChbMSwgMjBdLCBbMSwgMTBdLCBbMSwgMTNdKSkKICAgIHBsb3Rfc2FtcGxlcyhkYXRhLCB0aGV0YSwgdGVzdCkKCiAgICAjIHRoZXRhMF92YWxzID0gbGluc3BhY2UoLTEwLCAxMCwgNTAwKQogICAgIyB0aGV0YTFfdmFscyA9IGxpbnNwYWNlKC00LCA0LCA1MDApCiAgICAjCiAgICAjIEpfdmFscyA9IHplcm9zKChsZW4odGhldGEwX3ZhbHMpLCBsZW4odGhldGExX3ZhbHMpKSwgZHR5cGU9ZmxvYXQ2NCkKICAgICMgZm9yIGksIHYwIGluIGVudW1lcmF0ZSh0aGV0YTBfdmFscyk6CiAgICAjICAgICBmb3IgaiwgdjEgaW4gZW51bWVyYXRlKHRoZXRhMV92YWxzKToKICAgICMgICAgICAgICB0aGV0YSAJCSA9IGFycmF5KCh0aGV0YTBfdmFsc1tpXSwgdGhldGExX3ZhbHNbal0pKS5yZXNoYXBlKDIsIDEpCiAgICAjICAgICAgICAgSl92YWxzW2ksIGpdID0gY29zdCh0aGV0YSwgZGF0YSkKICAgICMKICAgICMgUiwgUCA9IG1lc2hncmlkKHRoZXRhMF92YWxzLCB0aGV0YTFfdmFscykKICAgICMKICAgICMgZmlnID0gcHlwbG90LmZpZ3VyZSgpCiAgICAjIGF4IAk9IGZpZy5nY2EocHJvamVjdGlvbj0nM2QnKQogICAgIyBheC5wbG90X3N1cmZhY2UoUiwgUCwgSl92YWxzKQogICAgIyBweXBsb3Quc2hvdyhibG9jaz1UcnVlKQoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQoK
stdin
Ni4xMTAxLDE3LjU5Mgo1LjUyNzcsOS4xMzAyCjguNTE4NiwxMy42NjIKNy4wMDMyLDExLjg1NAo1Ljg1OTgsNi44MjMzCjguMzgyOSwxMS44ODYKNy40NzY0LDQuMzQ4Mwo4LjU3ODEsMTIKNi40ODYyLDYuNTk4Nwo1LjA1NDYsMy44MTY2CjUuNzEwNywzLjI1MjIKMTQuMTY0LDE1LjUwNQo1LjczNCwzLjE1NTEKOC40MDg0LDcuMjI1OAo1LjY0MDcsMC43MTYxOAo1LjM3OTQsMy41MTI5CjYuMzY1NCw1LjMwNDgKNS4xMzAxLDAuNTYwNzcKNi40Mjk2LDMuNjUxOAo3LjA3MDgsNS4zODkzCjYuMTg5MSwzLjEzODYKMjAuMjcsMjEuNzY3CjUuNDkwMSw0LjI2Mwo2LjMyNjEsNS4xODc1CjUuNTY0OSwzLjA4MjUKMTguOTQ1LDIyLjYzOAoxMi44MjgsMTMuNTAxCjEwLjk1Nyw3LjA0NjcKMTMuMTc2LDE0LjY5MgoyMi4yMDMsMjQuMTQ3CjUuMjUyNCwtMS4yMgo2LjU4OTQsNS45OTY2CjkuMjQ4MiwxMi4xMzQKNS44OTE4LDEuODQ5NQo4LjIxMTEsNi41NDI2CjcuOTMzNCw0LjU2MjMKOC4wOTU5LDQuMTE2NAo1LjYwNjMsMy4zOTI4CjEyLjgzNiwxMC4xMTcKNi4zNTM0LDUuNDk3NAo1LjQwNjksMC41NTY1Nwo2Ljg4MjUsMy45MTE1CjExLjcwOCw1LjM4NTQKNS43NzM3LDIuNDQwNgo3LjgyNDcsNi43MzE4CjcuMDkzMSwxLjA0NjMKNS4wNzAyLDUuMTMzNwo1LjgwMTQsMS44NDQKMTEuNyw4LjAwNDMKNS41NDE2LDEuMDE3OQo3LjU0MDIsNi43NTA0CjUuMzA3NywxLjgzOTYKNy40MjM5LDQuMjg4NQo3LjYwMzEsNC45OTgxCjYuMzMyOCwxLjQyMzMKNi4zNTg5LC0xLjQyMTEKNi4yNzQyLDIuNDc1Ngo1LjYzOTcsNC42MDQyCjkuMzEwMiwzLjk2MjQKOS40NTM2LDUuNDE0MQo4LjgyNTQsNS4xNjk0CjUuMTc5MywtMC43NDI3OQoyMS4yNzksMTcuOTI5CjE0LjkwOCwxMi4wNTQKMTguOTU5LDE3LjA1NAo3LjIxODIsNC44ODUyCjguMjk1MSw1Ljc0NDIKMTAuMjM2LDcuNzc1NAo1LjQ5OTQsMS4wMTczCjIwLjM0MSwyMC45OTIKMTAuMTM2LDYuNjc5OQo3LjMzNDUsNC4wMjU5CjYuMDA2MiwxLjI3ODQKNy4yMjU5LDMuMzQxMQo1LjAyNjksLTIuNjgwNwo2LjU0NzksMC4yOTY3OAo3LjUzODYsMy44ODQ1CjUuMDM2NSw1LjcwMTQKMTAuMjc0LDYuNzUyNgo1LjEwNzcsMi4wNTc2CjUuNzI5MiwwLjQ3OTUzCjUuMTg4NCwwLjIwNDIxCjYuMzU1NywwLjY3ODYxCjkuNzY4Nyw3LjU0MzUKNi41MTU5LDUuMzQzNgo4LjUxNzIsNC4yNDE1CjkuMTgwMiw2Ljc5ODEKNi4wMDIsMC45MjY5NQo1LjUyMDQsMC4xNTIKNS4wNTk0LDIuODIxNAo1LjcwNzcsMS44NDUxCjcuNjM2Niw0LjI5NTkKNS44NzA3LDcuMjAyOQo1LjMwNTQsMS45ODY5CjguMjkzNCwwLjE0NDU0CjEzLjM5NCw5LjA1NTEKNS40MzY5LDAuNjE3MDUK
6.1101,17.592
5.5277,9.1302
8.5186,13.662
7.0032,11.854
5.8598,6.8233
8.3829,11.886
7.4764,4.3483
8.5781,12
6.4862,6.5987
5.0546,3.8166
5.7107,3.2522
14.164,15.505
5.734,3.1551
8.4084,7.2258
5.6407,0.71618
5.3794,3.5129
6.3654,5.3048
5.1301,0.56077
6.4296,3.6518
7.0708,5.3893
6.1891,3.1386
20.27,21.767
5.4901,4.263
6.3261,5.1875
5.5649,3.0825
18.945,22.638
12.828,13.501
10.957,7.0467
13.176,14.692
22.203,24.147
5.2524,-1.22
6.5894,5.9966
9.2482,12.134
5.8918,1.8495
8.2111,6.5426
7.9334,4.5623
8.0959,4.1164
5.6063,3.3928
12.836,10.117
6.3534,5.4974
5.4069,0.55657
6.8825,3.9115
11.708,5.3854
5.7737,2.4406
7.8247,6.7318
7.0931,1.0463
5.0702,5.1337
5.8014,1.844
11.7,8.0043
5.5416,1.0179
7.5402,6.7504
5.3077,1.8396
7.4239,4.2885
7.6031,4.9981
6.3328,1.4233
6.3589,-1.4211
6.2742,2.4756
5.6397,4.6042
9.3102,3.9624
9.4536,5.4141
8.8254,5.1694
5.1793,-0.74279
21.279,17.929
14.908,12.054
18.959,17.054
7.2182,4.8852
8.2951,5.7442
10.236,7.7754
5.4994,1.0173
20.341,20.992
10.136,6.6799
7.3345,4.0259
6.0062,1.2784
7.2259,3.3411
5.0269,-2.6807
6.5479,0.29678
7.5386,3.8845
5.0365,5.7014
10.274,6.7526
5.1077,2.0576
5.7292,0.47953
5.1884,0.20421
6.3557,0.67861
9.7687,7.5435
6.5159,5.3436
8.5172,4.2415
9.1802,6.7981
6.002,0.92695
5.5204,0.152
5.0594,2.8214
5.7077,1.8451
7.6366,4.2959
5.8707,7.2029
5.3054,1.9869
8.2934,0.14454
13.394,9.0551
5.4369,0.61705