from numpy import * from pylab import * import matplotlib.pyplot as plt Y = array([51.6,53.694,57.124,58.1025,58.61,60.694,62.951,63.5245,64.4705,66.5015,66.625,66.6775,68.0115,68.106,69.369,69.3795,70.4855,70.8925,70.8935,71.09,71.134,71.2905,71.9685,72.128,72.1875,74.8785,75.733,75.9915,76.5325,76.548,76.6515,76.993,77.294,77.5455,77.8185,77.8315,78.7715,78.8075,78.8275,80.213,80.567,80.583,81.495,82.1295,82.2615,82.366,82.54,83.6935,83.7335,84.176,84.392,84.563,84.65,85.1905,85.313,86.019,86.348,86.3745,86.5325,87.1605,87.1785,87.329,87.4235,87.457,87.914,89.0595,91.52,92.52,93.601]) X = array([[5, 4], [6, 8], [7, 7], [7, 6], [7.5, 7.5], [7, 8], [9, 6], [8, 7], [2, 7], [6, 8], [8, 7], [4, 7], [6, 6], [7, 6], [8, 10], [8, 8], [8, 8], [7, 8], [8, 6], [6, 5], [7, 4], [6.5, 6.5], [7, 8], [7, 7], [8, 5], [5, 5], [7, 9], [8, 7], [6.5, 5], [7, 7.5], [3, 7], [8, 9], [8, 10], [9, 8], [7, 7], [9, 9], [9, 6], [5, 5], [7, 5], [8, 7], [8, 8], [9, 7], [8, 9], [8, 7], [8.5, 8], [8, 7], [8, 5], [8, 6], [8, 6], [9, 10], [6, 9], [7, 7], [7, 5], [8, 8], [8, 10], [9, 6], [7, 6], [7, 8], [8, 7], [7, 6], [8.5, 9], [7, 6], [7, 5], [10, 5], [9, 5], [10, 7], [8, 9], [8, 9], [9, 9]]) Y0 = Y - mean(Y) w = dot(dot(inv(dot(X.T, X)), X.T), Y0) X0 = randn(X.shape[0], X.shape[1]) / 4 + X plot(X0[Y<70,0], X0[Y<70,1], 'rx', X0[(Y>=70) & (Y<80),0], X0[(Y>=70) & (Y<80),1], 'mo', X0[(Y>=80) & (Y<90),0], X0[(Y>=80) & (Y<90),1], 'bd', X0[(Y>=90),0], X0[(Y>=90),1], 'g+') x = arange(1, 11, 0.2) y = arange(3, 11, 0.2) gridX,gridY = meshgrid(x,y) Z = gridX * w[0] + gridY * w[1] plt.imshow(Z, interpolation='bilinear', cmap=cm.gray, origin='lower', extent=[1,11,3,11]) Xfull = array([[1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 5, 4], [1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 6, 8], [0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 7, 7], [1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 7, 6], [1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 7.5, 7.5], [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 7, 8], [0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 9, 6], [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 8, 7], [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 2, 7], [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 6, 8], [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 8, 7], [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 4, 7], [1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 6, 6], [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 7, 6], [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 8, 10], [1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 8, 8], [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 8, 8], [1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 7, 8], [1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 8, 6], [1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 6, 5], [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 7, 4], [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 6.5, 6.5], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 7, 8], [1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 7, 7], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 8, 5], [1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 5, 5], [1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 7, 9], [1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 8, 7], [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 6.5, 5], [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 7, 7.5], [1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 3, 7], [1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 8, 9], [1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 8, 10], [1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 9, 8], [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 7, 7], [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 9, 9], [1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 9, 6], [1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 5, 5], [1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 7, 5], [1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 8, 7], [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 8, 8], [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 9, 7], [1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 8, 9], [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 8, 7], [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 8.5, 8], [1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 8, 7], [1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 8, 5], [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 8, 6], [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 8, 6], [1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 9, 10], [1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 6, 9], [1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 7, 7], [1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 7, 5], [1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 8, 8], [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 8, 10], [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 9, 6], [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 7, 6], [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 7, 8], [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 8, 7], [1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 7, 6], [1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 8.5, 9], [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 7, 6], [1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 7, 5], [1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 10, 5], [1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 9, 5], [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 10, 7], [1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 8, 9], [1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 8, 9], [1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 9, 9]]) Xnames = ['CALC1', 'CALC2', 'CALC3', 'LINALG', 'PROB', 'ML', 'ALGO', 'VISION', 'NLP', 'ROBOT', 'OPTIM', 'PROG', 'MATH'] for x,y in zip(Xnames,w): print "%s\t%g" % (x,y) lam = 1 w = dot(dot(inv(dot(X.T, X) + lam * eye(X.shape[1])), X.T), Y0)