import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data2 = pd.read_csv('ex2data2.txt', header=None, names=['Microchip Test 1', 'Microchip Test 2', 'quality assurance'])
_, ax = plt.subplots(figsize=(10,6))
ax.scatter(x=data2[data2['quality assurance']==1]['Microchip Test 1'], y=data2[data2['quality assurance']==1]['Microchip Test 2'], c='red', marker='o', label='y=1')
ax.scatter(x=data2[data2['quality assurance']==0]['Microchip Test 1'], y=data2[data2['quality assurance']==0]['Microchip Test 2'], c='blue', marker='x', label='y=0')
ax.set_xlabel('Microchip Test 1')
ax.set_ylabel('Microchip Test 2')
ax.legend()
plt.show()
定义函数构造多项式特征,可以自己编写函数,也可以使用sklearn.preprocessing.PolynomialFeatures
from sklearn.preprocessing import PolynomialFeatures
def feature_map(data, power=1):
poly = PolynomialFeatures(power)
return poly.fit_transform(data)
数据初始化
X = feature_map(data2.values[:,:-1], 6)
y = data2.values[:,-1]
theta = np.zeros(X.shape[1])
定义sigmoid函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
定义代价函数
def costFunction(theta, X, y, lamda=0):
return np.mean(- y * np.log(sigmoid(np.dot(X, theta))) - (1 - y) * np.log(1 - sigmoid(np.dot(X, theta)))) + lamda / (2 * X.shape[0]) * sum(theta[1:] * theta[1:])
costFunction(theta, X, y)
0.6931471805599454
定义梯度下降函数
def gradient(theta, X, y, lamda=0):
temp = np.zeros(X.shape[1])
temp[1:] = lamda / X.shape[0] * theta[1:]
return (1/X.shape[0]) * np.dot(X.T, sigmoid(np.dot(X, theta)) - y) + temp
定义优化器求解
import scipy.optimize as opt
def opt_minimize(theta, X, y, lamda=0):
return opt.minimize(fun=costFunction, x0=theta, args=(X, y, lamda), jac=gradient, method='Newton-CG')
res = opt_minimize(theta, X, y, 0.1)
res
fun: 0.39459413886837336
jac: array([ 1.59606926e-07, 9.55862480e-08, 7.80291421e-08, 7.82880861e-08,
-5.42155912e-08, -1.95167654e-08, 2.51495090e-08, 2.23552154e-08,
2.27812757e-08, -1.34140482e-08, 2.62075651e-08, -1.81413433e-08,
2.50288801e-08, 1.38495687e-09, 4.59880295e-08, 3.81082340e-08,
6.17029884e-09, -3.11331424e-10, 7.81442803e-09, 1.19263211e-08,
-4.90765663e-08, 4.46078576e-09, -7.98232782e-09, 1.96910205e-09,
-1.24834627e-09, 8.92749554e-09, -1.50935178e-08, -7.46805079e-08])
message: 'Optimization terminated successfully.'
nfev: 13
nhev: 0
nit: 11
njev: 353
status: 0
success: True
x: array([ 2.75388901, 1.80721804, 2.95665911, -4.21450687, -3.37951426,
-4.22537305, 0.74551614, -1.07820274, -0.47233842, -0.49912867,
-3.26576077, 0.5279155 , -1.76304768, -1.20787477, -2.77788005,
-0.62158143, -0.47032465, 0.62374778, -1.137011 , -1.21215262,
-0.09179464, -2.63127784, 0.44537292, -0.7362243 , 0.42674371,
-1.14910402, -0.95794963, -1.14893012])
定义决策边界函数
def plot_bound(theta, ax):
x_min = data2.iloc[:,0].min()
x_max = data2.iloc[:,0].max()
y_min = data2.iloc[:,1].min()
y_max = data2.iloc[:,1].max()
temp = np.array([(i,j) for i in np.linspace(x_min, x_max, 2000) for j in np.linspace(y_min, y_max, 2000)])
data = feature_map(temp, 6)
temp = data[np.abs(data @ theta) < 0.0003]
x = temp[:,1]
y = temp[:,2]
ax.scatter(x, y, label='desision bound')
_, ax = plt.subplots(figsize=(10,6))
ax.scatter(x=data2[data2['quality assurance']==1]['Microchip Test 1'], y=data2[data2['quality assurance']==1]['Microchip Test 2'], c='red', marker='o', label='y=1')
ax.scatter(x=data2[data2['quality assurance']==0]['Microchip Test 1'], y=data2[data2['quality assurance']==0]['Microchip Test 2'], c='blue', marker='x', label='y=0')
plot_bound(theta_result, ax)
ax.set_xlabel('Microchip Test 1')
ax.set_ylabel('Microchip Test 2')
ax.legend()
plt.show()
![](data:image/png;base64,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W7FiBb75zW9ix44duP322/GZz3wGAHDLLbdgy5Yt2LlzJzZt2jTpMW+//XZ861vfwsDAAH7+858jGo1mXP+tb30LADA4OIh7770X119/Pd544w0AwMDAANavX4/BwUGsX78eL7744qTHB4CTTjoJv/rVr/DZz34WN910EwDgs5/9LD7+8Y/j6aefRmtra85lX11/fz/uuOMOPPPMM3jhhRfw+OOP44033sCnPvUpPPTQQ/j5z3+Ol19+uYDfZPEYzBEVwNUZlNZWrdihrk5bf6ur81zxg994YUbMWIm7dq1WqKxXA7MJMtmtZ8tujI6NZxwbHRtHz5bdFvfI7+c//zmuvvpq1NTU4KSTTsKVV14JAPjLX/6CX/7yl7j22mvR2NiIv/u7v8NLL70EAFi8eDE+8YlP4Dvf+Q7Gx8cnPebixYvxhS98AXfeeSeGh4cxZUpmdtgvfvELfOxjHwMAzJ8/H3V1dfjd734HALj44otx8sknY9q0aViwYAH27dtnOu6PfOQjE9+feOIJAMATTzyBj370owCAj33sY/jFL36R9+c/99xzMWfOHFRVVaGxsRF79+7Fb3/7W8ydOxenn346RATXXXdd3scpBYM5ojw8MYPS2grs3av1/Ni7l4FcGTzxeqY51WiZKNuB4dGijhdKTP54U6kUYrEYBgYGJr6effZZAMC3v/1t3HrrrXjxxRfR2NiIV199NeO+HR0d+I//+A+Mjo5i0aJFE8uzulwdOY477riJf0ciERw9ejTvmM3Gbzw+ZcoUpFKpiec+cuRI3uezesxKYjBHvuDmkhhnUILFS68nd7Mgt8yORYs6XogLLrgAP/rRjzA6OorDhw/joYceAqAtY86dOxcbNmwAoAVBO3fuBKDl0p133nm45ZZbcMopp0xaCn3++efR0NCAL3/5y2hubp4UzF1wwQXoTffd/N3vfoehoSHMmzevqHGvX79+4vu73/1uAMB73vMe3HfffQCA3t5evPe97wWgVb/u2LEDAPDggw9ibGws52PPnz8fe/bswfPPPw8AuPfee4saW6EYzJHneWlJzIiBnH954fXkbhbkpval8xCtjmQci1ZH0L60uEDI6Oyzz8by5cvR2NiID37wgzj//PMnruvt7cV3v/tdnHXWWVi4cCEefPBBbRzt7WhoaMA73/lOXHDBBTjrrLMyHvOOO+6YKJCI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)
绘制lamda=0的决策边界
theta_0 = opt_minimize(theta, X, y, 0).x
_, ax = plt.subplots(figsize=(10,6))
ax.scatter(x=data2[data2['quality assurance']==1]['Microchip Test 1'], y=data2[data2['quality assurance']==1]['Microchip Test 2'], c='red', marker='o', label='y=1')
ax.scatter(x=data2[data2['quality assurance']==0]['Microchip Test 1'], y=data2[data2['quality assurance']==0]['Microchip Test 2'], c='blue', marker='x', label='y=0')
plot_bound(theta_0, ax)
ax.set_xlabel('Microchip Test 1')
ax.set_ylabel('Microchip Test 2')
ax.legend()
plt.show()
![](data:image/png;base64,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axVkVa4RhZZF0qS3t5drr7226OVz5szhtttua2CLkk/BnEgDFFvhAbxA6eqlxxa/crGSOhGV2lmyqJOrly6gs6MdI/6ZtVmm1SwkTtXMWi9nYGCA+fPn85a3vIUtWybTSh5//HHOPPNMXvva13LSSSfxk5/8BIBbb72V17zmNRx33HGcfPLJwNTeq3vuuYeFCxeycOFCFi1axAsvvMDWrVt5zWu8FUB/97vf8ed//ucsWLCARYsWcddddwFw/fXXs3TpUs4880yOPPJI/vZv/7Zom9esWcMJJ5zACSecwGOPPQbAtm3bOO200zj22GM57bTT2J778XzxxRdPCSRf/vKX72vzm9/8Zs477zyOOuoo+vr6cLk39n/+539y1FFH8cY3vpGvfvWrNR/jQpJeZ04kMapdD7Tc8GrZQGlgYGrOHMCsWd72iFS7soS/osXO0THmdLSz4oz5iQ0C417fVatZSJzyi5b7s9aBqt+zDzzwADfffDPDw8Ps2bOH448/nte+9rUALFu2jM9+9rMceeSRfP/73+f9738/Gzdu5KqrrmLDhg10dnYyOjo67TY//elPc91117F48WJ+85vfMHPmzCmXX3fddQA89NBD/OQnP+H000/npz/9KQCbN29meHiY/fffn/nz5/PBD36Qww8/fNp9HHDAAfzgBz/gS1/6En/913/NN77xDT7wgQ/wnve8h4suuogvfOELfOhDH2JoaKjk4x8eHubhhx9mzpw5LF68mHvvvZfe3l7e9773sXHjRo444gguuOCCqo5tOeqZEwmh2h6UcsOrnR3t5T84+/pg/Xro7va+3bu7vfMRTH6oRbUlTeKQhB6x4Ezcdeu8icp+IKcJHRK1amatl/Pf//3fnHvuucyaNYsDDjiAs88+G4Df/OY3/M///A9vf/vbWbhwIX/xF3/B008/DcDixYu5+OKL+dznPsfevdNHLxYvXsyHP/xhrr32WkZHR5kxY2of1Pe+9z3e/e53A3DUUUfR3d29L5g77bTTOPDAA5k5cybHHHMM27ZtK9jud7zjHftO77vvPgDuu+8+3vnOdwLw7ne/m+9973tlH/8JJ5zA3LlzaWlpYeHChWzdupWf/OQnzJs3jyOPPBIz413velfZ26mGgjmRMoI9KH4A4PegjI6WznEqN7waeoWHvj7YutWr+bF1a+ICOYjmyyEKtTyf9daoQssi+aqZtR6GFXjxTkxM0NHRwebNm/f9PfroowB89rOf5ZOf/CRPPfUUCxcu5Nlnn51y3ZUrV/Kv//qvjI2NceKJJ+4bnvW5Em/Y/ffff9//ra2t7Nmzp2ybC7U/uH3GjBlMTEzsu++XXnqp7P0Vu816UjAnqRBnkngtPSilPhizlocW1ZdDvSWpR0yrWUhcqp21XsrJJ5/M1772NcbGxnjhhRf4+te/DnjDmPPmzePWW28FvCDowQcfBLxcute//vVcddVVHHrooTz11FNTbvPxxx9nwYIFXHHFFfT29k4L5k4++WQGc3U3f/rTn7J9+3bmz69sGcRbbrll3+kf/dEfAfCGN7yBm2++GYDBwUHe+MY3At7s1wceeACA22+/nfHx8ZK3fdRRR/Hkk0/y+OOPA3DTTTdV1LawFMxJ4iVpSCyo3Bf/0PAILUV2CDW8mjJRfDlEJQk9YlrNQuJUy6z1Yo4//nguuOACFi5cyJ/92Z9x0kkn7btscHCQz3/+8xx33HG8+tWv5vbbb/fasWIFCxYs4DWveQ0nn3wyxx133JTbvOaaa/ZNkGhvb+etb33rlMvf//73s3fvXhYsWMAFF1zA9ddfP6WHLIwXX3yR17/+9axbt461uQ+Ga6+9li9+8Ysce+yxfPnLX2ZdLrn1fe97H/fccw8nnHAC3//+93nZy15W8rZnzpzJ+vXrOeuss3jjG99Id3d3RW0Ly0p1UWZNb2+v27RpU9zNkArkf+HlJ4k36gs42A5fqfvPTy4O8mavZqtXDgo/5mKPNe6JEpU+n1Hp7/eGdv379dvV0aEZrVnRyIk2jz76KEcffXTo/eN+H8pUhZ4/M3vAOddb7rqazSqJFuxBWbdu8ss3rkAuP6CEwu0olivXapbJQA4mZ8CV+3KIYhZdJap5PqOi1SyyLenBerWz1iV5FMxJ4vlfcMFelEZ+4VWzVFWxPLEJ5zL94Rnmy6HURIlGHJtGLj0Wtj2lzks6qfSMNJKCOUm8YkniSe5BmdPRXrC2XBLzxxotCRMl1CMmUUvCqII0D02AkERLUpJ4uR6UYDX13764h7bWqTvUmlycFUmZKKEeMYlaHBNtmikPPktqfd4UzEmiFRsSW748niGxYoaGR1hx24P7CuaOjo2zd8Jx0Kw2LYmVJ4pZdCJJ1OjSMzNnzuTZZ59VQJcyzjmeffbZaatbVELDrJJ4aRgS+z9ff5jxvVM/QCdyZ59cfVYMLUqusBMlRNIsjok2c+fOZceOHezatau+NyyRmzlzJnPnzq36+grmJBWSPiT2/O7ChSOLbW92mkUnWRfHRJu2tjbmzZtX/xuWxFMwJyIiEoE0jCpINihnTqQOOtrbKtouIs0h6aMKkg3qmROpUrB6+oHtbbTYZJ4cQFuL0X/2q+NroEgCNHIFBJFmpZ45kSr4qxgEZ6+2mk2Zvbrm7ccpL0yaWhLWVRZpBgrmRKpQaBWD8QnHrP1m8OTqs7h35akK5KoxOAg9PdDS4p0ODtbtpoN1ABev3sjQ8EjdblumC66A4Ad0/mzO0dHG1ogUyToNs4pUIQmrGGTO4CAsWwa7d3vnt23zzgP09dV003GvB9uMtAKCSONYMxUX7O3tdZs2bYq7GZIBi1dvLLhcV2dHO/euPDWGFmVAT48XwOXr7oatW2u66WLPV6sZE86p1l2EnPM6Wn0TEwrkRMIyswecc73l9tMwq0gVMr2KQYRDnSVt317Z9goU6zHd6xyOyZ46Db3WV6NXQBBpVgrmRKqwZFEnVy9dQGdHe7aW6/KHOrdt875x/aHORgR0XV2Vba9AmHVfx8b3smbDlprvSzxJWldZJOuUMydSpUyuYrBq1WTOmm/3bm97jXlrZQ0MTM2ZA5g1y9teoxVnzJ+SM1dMqZzHuEtsxH3/lYpjBQSRZqWeOZESGjYDMq6hzXwRDnWW1dcH69d7OXJm3un69XUJIvN7UluLRBLFevDiLrER9/1Xq79/6mQHP6BLertF0kbBnEgR+bXkIsurinNoM1+EQ52h9PV5kx0mJrzTOvYGLlnUyb0rT+XJ1WfxD+cfFzrnMe4SG3Hff620AoJI9DSbVaSIhs1YjXAWZ8Xyy4OAN9RZpx6yJAmu4FFuNmswgPI1ssRG3PefNmkbkhYpJuxsVgVzIkXMW3knhd4dBjy5+qz63VFLS+HuFTOvh6rRBge9HLnt270euYGBzAVy1Yi7xEbc958W/f1ej6Uf6PqBcEeHhnclfVJRmsTMzjSzLWb2mJmtLHD5WjPbnPv7qZmNBi7bG7jsjsa2XJpBsfypMDMjKxL30Ga+CIc606rSEhv1zrVUiY9w0j4kLVKt2II5M2sFrgPeChwDvMPMjgnu45y73Dm30Dm3EPhH4KuBi8f8y5xzZzes4dI0GlZLbmDAG8oMqtMsTqldpSU2CuVaXn7LZnqqDOxU4iM8f4KFf3xaWiaPm4akJcviLE1yAvCYc+4JADO7GTgHeKTI/u8APtGgtonsy58Km1dVNb/nS0ObiVRpiY1C6/b68VY1y4ipxEdl/OMTzC9UICdZF1vOnJmdB5zpnLs0d/7dwOudcx8osG83cD8w1zm3N7dtD7AZ2AOsds4NlbtP5cyJSLXCJtUXy7UMCk6iCTsRQ0n94cQ1WUTPj0QhDTlzhV7mxT4DLwRu8wO5nK7cA3wncI2Z/UHBOzFbZmabzGzTrl27amuxiDStsCU2wuRU+sWJKyl/oxIf5cU1JJ3WOoCSHXEGczuAwwPn5wI7i+x7IXBTcINzbmfu9AngbmBRoSs659Y753qdc72zZ8+utc0iIiUVyrXM5wd8hYZkx8b38jdfeTD6QtUZVGxIevny6IakNelCkiDOYdYZwE+B04AR4IfAO51zD+ftNx/YAMxzucaa2UHAbufci2Z2KHAfcI5zrli+HaBh1qSJY1gizJCWhkukVv7rbGR0DGPqkEN7W+u+dXzDDMm2t7XyZ6/t5K6f7Io2dzNDGv0eVh1AiUoq6syZ2Z8A1wCtwBeccwNmdhWwyTl3R26ffmCmc25l4HpvAP4FmMDrXbzGOff5cvenYC45Gl0Lamh4hP47HmZ0bHzK9uAXaxztkuwr9QOiWGHqfKUCQkkG1QGUKKQhZw7n3H845/7QOfcHzrmB3LaP+4Fc7nx/MJDLbfsf59wC59xxudOygZwkR6OHJfy8pPxADrwhrTUbtsTSrkRJytqwjdLAxxtcRuzeladOCcDCDMnC9GTi4OtW4qc6gBK3OEuTSJMKllZYt25yaCKqYYlCeUlBfjJ6o9uVGPlLePlrw0I2y6Mk6PHml79pMWNvyAhgZ4gePYle/qSLtWunDrlm+rNDEiPWnjmJVv53QpJ+JQYDJ19UH3rlvvSCsw8b2a7Ihe19WrVq6lqs4J1ftSrqFsYjYY832HP3D+cfN62nrthLr+4rkfiarZe2RnFMuhDJp2Auo5I+Vb6RwxKlvvTyV3TIzHCJ3/u0bZvXeL/3qdAX8/bthW+j2PZK2pDEoCCqx1sHSxZ1cvXSBXR2tGN49ej6TuxqzEokUNnrRvbp75/6o88P6JLyeSvZp2Aug5Ke+xVVLahi62EWy0s6aFbblCTyTC2bVEnvUxRrwyY5KEjaWrh58nPsPrlkwbQAL7LJDwnrtUwT1QGUOClnLoOSnvtVz+WJipWAKLRsUrmSJJlaNqmS3qeBgak5ZFD72rClgoK48/CieLwRW7KoszEzV5PQazk4qKXtEkblmpIv1tIkjdZspUmSPlW+1g8If5ZqqckNwWWTGtWuROjp8XrD8nV3w9at07fX+wu0paVwV6aZ90KMmwKGwip93dRb/uQU8ALt9ev1/MRE5ZrilYrSJBKdNOR+VTMsERxK/ZuvPFgykIPqZvxlYrhkYMD7Egwq1fvU1+d9WU9MeKe1fnEmfCiz7o83Kyp93dSbhnkTJekpOzJJwVwGZSr3KyB/HcswJRwim/GXdH19Xm9Gd7cXjXZ3l+7dqPdkhbiDAqlOpa+beiszzOv/mOtZeSd/cOV/0KMlzyIVnJm7bp338RAswZLKH7oZpWHWjMpi13jYavk+VckPKaqhLQ1lSqVKDPMOfe3eomkVaX+vJz21I+kpO1mWiuW8Gq2ZgjlI/gdEpcKsY+lPgujU+pXhxZ0nJeIr8cNi8VOHlfwxV01+bBIk/Ye31p2Nl3LmJBu5XwHFhkxbcZhzdP7ql6z9ny+ydcHotGWTpIQkzGAUgZLDvOXyX9O4IkbSc9KymrKTRSpNIqmx4oz504ZZ2s1x9TevZcmD357c8YFveqca0gunq6twz1xSJitIJBLbc9/XV/C9O6ejvWTPXBrzY5upjJRES8Oskip+Xbl99eL+459Z8t//Pn1HDRGGp3IQTSfpQ3uFlCpFlIWcuSTnpCU28G8CYYdZ1TMnqTKteOr/95bCO2qIMDw/YNNkhaYQHNqDqQvDL1+e3C/qYPHvkdExWs3Y61zq82OLlZFKQs+cL2spO1mknjlJNyXvi1RMSe31UWuPVX5OWn5gredDNAFCGiPuxdRVz0ykYsHcJ58Ch8r090+dBPC1/x3hmCs2VlT7rlhO2vLlykmTymiYVaqXn2vlL6YOjRui0xChSMXSMLSXZPlD1W96zwgfueUh9rZ4+XyF1oYupr9/ao+eH9DpeZBKqGdOqpe39M7Q0W9i8Xv+iXk/OrCxVdm1NJNIaCo3Ubv8lRE++Lkt7LWpEzPGxveyZsOW0LdX6rxIOQrmpHqBSQZDR7+JK9/6QUYOfCXObN8vUy2zI5IsZYf2bow5dSIlgkPVrQcULpmSxtp3kk4K5qR6gTpka950EWNtM6dcXMkvU5FMiDuHNKT+/qlDeX5g0n9kLnVi2zavi85PnUjo44hTcKh6768L17hLY+07SScFc1K9wOSDnQccWnAX/TKVpjGYrkCo4NBeXuoE4J1ftaph7UqD/KHqf3zffFpd65R92ttaWXHG/JhaKM1GwZxUL7D0zpxfP1NwF/0ylaaRhUBIS7uFkj9Ufe7xnXz6ggW0T3ifd50d7akuYizpozpzUheFqrOnvSq71GhwsLlmGbe0FJ49YObNMkgD1W2siFZGkKipzlwTyf/+iCM+X7Kok6uXLqCzox1Dv0wzqZJ8sJQNOdZFsbVs07TGreo2VkSzUCUp1DOXcmlcY1FSqNL1W5uxhyfMMUpDb2Ua2phR09aeTvEyZVIf6plrAsHClX59KD8pd3RU9aKkjirNB2vG3KtADilm3ml+IJeG3krVbYyFn6oyMjqGA5V3koqoZy7ltMaiNESl+WDN2DNXjo6JlLB49UZGCsz+7+xo596Vp8bQIkkC9cw1iSjWWBwaHmHx6o3Mq2CNQcm4SvPBlHs1Xa29lSmpYSfVKVbGSeWdJAwFcylXbI3FajtcPzr0EJffslld/TJVpcFZuSHHZlTLBIm0DNFK1YqVcVJ5JwlDwVyK1XuNxaHhEQbv307+1bSSg1QVnCn3aqpaeiuzUMNOSlpxxnza26IrPJyEqgcSnViDOTM708y2mNljZraywOUXm9kuM9uc+7s0cNlFZvaz3N9FjW15MpRdY7GCodah4RH+5isPTgvkfGG6+pvmw6JZh7sUnNWmlt7KZpxQ0mSiLO/U3z/1B77fEaCKB9kxI647NrNW4Drgj4EdwA/N7A7n3CN5u97inPtA3nUPBj4B9AIOeCB33ecb0PRE6e+fWqjSD+gqDeSu/OpD7C0RfZXr6m+aEin55Sf84S5QcCPl9fVV9zrp6io8eSJNNeykrCWLOuteiiRY9QC8z+jgiI4KHWdDnD1zJwCPOeeecM69BNwMnBPyumcA33bOPZcL4L4NnBlROxOv1sKVazZsmbJyw7Tbh5Jd/U1VIkXDXRIHTSiJTsZ72oMjNuvWeQ/TD+RU9SA74gzmOoGnAud35Lbl+zMz+5GZ3WZmh1d4XcxsmZltMrNNu3btqke7M6fUEKoBfSd2lfy12FQfFhrukjhoQkk0mmRiSRRVDyRZ4gzmCr2M8vtwvg70OOeOBb4D3FDBdb2Nzq13zvU653pnz55ddWOzyC9BUqzjrNWMtRcs5JNLFpS9rab5sMjCkk2STspZrL8U97RXUkKq3lUPJHniDOZ2AIcHzs8FdgZ3cM4965x7MXf2c8Brw15XSgtWGy+kva2Vfzj/uND5G03zYdGI4a6MD/uIJEZKe9orWS2i3lUPJJniDOZ+CBxpZvPMbD/gQuCO4A5mdljg7NnAo7n/NwCnm9lBZnYQcHpum4RUKk+u0llUkX5YJC2wiXq4q0mGfUQSIaU97YU+v4uVkKpn1QNJrthmszpOFVLHAAAgAElEQVTn9pjZB/CCsFbgC865h83sKmCTc+4O4ENmdjawB3gOuDh33efM7P/iBYQAVznnnmv4g0ixYnlyBhUvHVPswwJq/LBI6szRamckhlFq2EfDaiL1NTAw9TMGUjGxpNLVIupR9UCSTWuzNqko1gHMn+Je85T3ZlzLstI1UEWkNoOD3o+l7du9HrmBgcT/cNI6rs1Da7NKSVFUG6+1RMo0Kc1nqUlKh31EUiuFE0sKfn7veZEVL38mphZJ3BTMNakoq43XTTMGNqonJiJlLFnUydW/92s6f70LcxN0/uqXXP0f17Lkij9Xfm2T0jBrkxgaHmHNhi3sHB1jTkc7K86Yn6zArZD8nDnwApus19dK4bCPiDRYM6ahNKGww6wK5pqAP409OPupva01eT1xhSiwERGZTvm1TUE5c7JPJdPYEyeF+SwiIpErkm4y9MaloYsJS3YomGsCxQoDl1rGS0REEqxAfu3QcX/MlYsvDlVMWLJFwVzGDQ2PFFz7DGBOR3tD2yIiInVSoID5mj/9AGNu6id+akZhpCZFgzkze7WZfc/MnjSzfzazAwOX3deY5kmt1mzYUnDtVYOaypCIxCppK4OIxCEvDWXneGvB3TQKk32leuY+C6wGXgdsB75nZvNyl82MumFSH8XexA6SP/lBpBAteSZSULHRFo3CZF+pYO4VzrlvOOeecc6tBi4HvmVmr4OCnT2SQMXexJ16c0talVryTKSJRVEMXtKhVDDXYmYH+Gecc98B3g7cCGS4amu26M0tmdOMK4OIhJCKYvASiRklLlsDvBrYlx/nnNtsZn8MfCLqhkl9+G/i1BUMFimmq6twsdQsrwwiEtKSRZ36fG9CKhosIunSrCuDiDQB56au651/vtmoaLCIZFOBkgwK5ETSr78fLr98cmEL57zz/f1xtiodFMxl2NDwiCqBSzbLeGhlEJFMcQ5GR2HdusmA7vLLvfOjo4VXLpNJpXLmADCzE51z95fbJsmSvx6rXwkcVJKkqeQPSfplPEABkIgkhhmsXev9v26d9wewfLm3vZmHWsMomzNnZv/rnDs+b9sDzrnXRtqyCDRTztzi1RsLLuPV2dHOvStPjaFFEouensKTBbq7vR4tEZEEcc4bRPBNTDR3IFdzzpyZnWBmy4HZZvahwN9HgbZ6Nlbqr1ix4KorgWdxqK4ZqIyHSNNLS8qNP7QaFMyhk+JK5cy9DDgUbyh2duDvJbx6c5Jgda0Eror76VWsXIfKeIg0BT/lZmR0DMdkyk3SArpgjtzy5V6P3PLlU3PopLiiwZxz7i7n3MeAxc65j+X+/zhwnXNOq/YmXF2LBavifnoNDHhlO4JmzfK2i0jmrdmwZV/utG9sfC9rNiTra9wMOjqm5sitXeud7+ho7qHWMMpOgAD6zewDwB5gE3Coma12zn0m2qalU1Jq5NS1WLCG6tLLn+SwapX3fHV1eYGcJj+INIW6p9xEqL9/6nemH9ApkCsvTDC3wDn3azN7J/At4G/xgjoFc3n6+70p1P6Lz+827uiIp05O3SqBq+J+cYODyQ+U+vqS1yYRaYg5He0FJ8NVlXLTAPmBmwK5cMLUmdvPzGYA5wBDzrmXgIlom5U+ma6Ro6G6wpRLKCIJp/W5m0OYYO5fge3AQcA9ZtYF/CbSVqVQcHx/3Tpv0qefyFlLN3F+EBhLUKiK+4Upl1BEEm7Jok6uXrqAzo52DK881dVLF6jeaMZUvDarmbUAM3I9dKnSiDpz9ayRk7RhW8nT0lI4ujbznngREZEa1G1tVjObbWb/YmbfyG06CnhnrQ3MonrWyMn0sG1WqOyHiDSBRIwQSUlhhlmvB+4BDs+d/xnwN1E1KK3qXSMnqmFbqSPlEopIxvX3T/0O87/rNDqULGGCuVc6524kN+nBOTcO7C19leYTRY2c4Fp1PgVyCaJcQpFsa/KVbzRClB5h1ma9G1gKfMc5d7yZvQ74jHPupAa0r64alTNXrzpzwTeOTz1zIiIN4M9WD05ymjWr6X6w6XsoXnXLmQM+AnwdeJWZ3QPcBHywxvYBYGZnmtkWM3vMzFYWuPzDZvaImf3IzL5rZt2By/aa2ebc3x31aE891KtGjpY2ERGJkWarAxohSouiRYPN7ETn3P3OuU1mdgpwNGDAI/WYyWpmrcB1wB8DO4AfmtkdzrlHArsNA73Oud1m9pfA3wMX5C4bc84trLUdSVVs2Ba0tImISOS08g1QfGKfArpkKbUCxD8DxwPkgrcH63zfJwCPOeeeADCzm/EKE+8L5pxzdwX2vx94V53bkGha2kREJCYZXflmaHgk9DKP+SNEa9dOHXLV91FyhBlmjUon8FTg/I7ctmIuAb4ZOD/TzDaZ2f1mtiSKBiaBljYREYlBBmerDw2PcOVXH2JkdAwHjIyOceVXH2JoeKTg/lFM7JNolOqZe1WpXDTn3Nk13nehl0HBTDAzexfQC7wpsLnLObfTzF4FbDSzh5xzjxe47jJgGUBXyn9RiYhIg/iTHJK+9nIF1mzYwtj41GIUY+N7WbNhS9HeOY0QpUOpYG4X8A8R3vcOJmvXAcwFdubvZGZvAVYBb3LOvehvd87tzJ0+kZtxuwiYFsw559YD68GbzVrH9ouISJb19aU6eMu3c3Ssou0+jRAlX6lh1hecc/cU+6vDff8QONLM5pnZfsCFwJSeQDNbBPwLcLZz7peB7QeZ2f65/w8FFhPItRMpqsnrRolI85rT0V7RdkmPUsHc1ijv2Dm3B/gAsAF4FPiKc+5hM7vKzPwh3DXAy4Fb80qQHA1sMrMHgbuA1XmzYCXNogq4/LpR27Z54wbbtnnnFdCJSBNYccZ82ttap2xrb2tlxRnzY2qR1EvZosFZ0oiiwVKjKAt19vQUnp3W3Q1bt9Z22yIiKVDJbFaJX9iiwQrmJFmiDLhaWgpXWzbzqjKLiIgkSD1XgBBpnCgLdRabzaxZziIikmKhgjkzW2pmnzGzfzCzc6NulDSxKAOuDNaNEhERKRvMmdk/A5cBDwE/Bv7CzK6LumHSpKIMuPr6vNy77m5vaLW7u+kWzRYRkewJ0zP3JuAM59wXnXNfBP4EeHOkrZLmFXXA1dfn5d5NTHinzRDIqRyLiEimlSoa7NsCdAF+VvrhwI8ia5FEKhUzmTJWqDNW+bOD/XIsoGMsIpIRYXrmDgEeNbO7cystPALMNrM7Si33JclT6bp8kgGrVk0t8wLe+VWr4mmPSDNQb7g0WJieuY9H3gppiGrW5ZOUi3J2sIhMp95wiUHZYK5OS3dJAlS7Lp+kWFdX4bp9KsciEo1SveEK5iQiRYdZzex7udMXzOzXgb8XzOzXjWui1IvW5WtCKsci0ljqDZcYFA3mnHNvzJ2+wjl3QODvFc65AxrXRKkXrcvXhFSORaSxVJxcYhAmZw4zawV+L7i/c04/M1LGz4tL/GxWqS/NDhZpnIGBwutLqzdcIlQ2mDOzDwKfAH4B+AtYOuDYCNslEVmyqFPBm4hIVPwfTqtWeUOrXV1eIKcfVBKhMD1zy4H5zrlno26MiIhI6qk3XBosTDD3FPCrqBsi8UlFIWEREZGYOOelHRc7H7eiwZyZfTj37xPA3WZ2J/Cif7lz7jMRt00awC8k7Nef8wsJAwroRESk6fX3w+gorF3rBXDOweWXQ0eHd1kSlFoB4hW5v+3At4H9AtteEX3TpBFKFRIWERFpZs55gdy6dV4A5wdy69Z5252Lu4Weoj1zzrn/08iGSDxUSFhERNKkkUOeZl6PHHgB3Lp13v/Ll0/21CVB2bVZzezbZtYROH+QmW2ItlnSKCokLCIiadHfP9lDBpM9ZVEOdwYDOl+SAjkIEcwBs51zo/4Z59zzwCuja5I0kgoJi4hIGsQ15OnfT1AwoEyCMLNZ95pZl18k2My68erMSQaokLCIiKRBHEOewYDRvx//PCSnh85cmdDSzM4E1gP35DadDCxzzqVuqLW3t9dt2rQp7maIiIhIlZyDlsC44sREtAFVnLNZzewB51xv2f3KBXO5GzsUODF39n7n3DM1ti8WCuYqo/pzIiKSJMGeMl8jJiPEVWcubDAXJmcO4A3Am3N/J5bcUzLBrz83MjqGY7L+3NDwSNxNExGRJpQ/5Dkx4Z0Gc+iikh+4JWFoNSjM2qyrgdcBg7lNy81ssXPuykhbJjWr5ZdEqfpz6p0TEZFGM/OGNoM9cX4OXUdH8gKsRgozAeJPgIXOuQkAM7sBGAYUzCVYrWP8qj8nIiJJ098/tWPCD+iaOZCD8MOsHYH/D4yiIVI/9Zi+rfpzwOAg9PR4mbY9Pd55ERGJVdKHPOMQJpi7Ghg2s+tzvXIPAH8XbbOkFv4vFT+XoKVl6rTqMC/8pq8/NzgIy5bBtm1e9Lttm3c+ioBOQaOIiNSg5GxWMzNgLrAHL2/OgO87537emObVV7PNZq11+nZTz2bt6fECuHzd3bB1a/3uxw8ad++e3DZrFqxfD3199bsfEZGUiWsGaZLUrTRJ7oZeW7eWxaiZgrm4pm9nRktL4fFoMy8qrpdGBY0iaTY4CKtWwfbt0NUFAwP6sZNxcdZ2S5J6lia538xeV4c2TWNmZ5rZFjN7zMxWFrh8fzO7JXf5982sJ3DZlbntW8zsjCjal1axTd/O0nBhV1dl26u1fXtl20WaTSNTHiQR4lq2K83CzGY9BfgLM9sG/BZvqNU5546t5Y7NrBW4DvhjYAfwQzO7wzn3SGC3S4DnnXNHmNmFwKeAC8zsGOBC4NXAHOA7ZvaHzrmptTSaVCzTt/OHC/0PXEjnL+iBgcLDnwMD9b2frq7CPXP1DhpF0mrVqqnvQ/DOr1qVzs8WKSuOZbvSLswwa3eh7c65At9AFdyx2R8B/c65M3Lnr8zd7tWBfTbk9rnPzGYAPwdmAyuD+wb3K3WfzTTMCg3ON8jicGEjhnaUMydSWqNSHiRxGr1sVxLVc5j1MOA559y2XAD3HPD7tTYQ6ASeCpzfkdtWcB/n3B7gV8AhIa/b9BoxfXtoeITFqzcy74J/ZPFlX2Do6DdN3SHNw4V9fV4gOjHhnUYRXPX1eYFbd7f3BHV3K5ATCWpUykMT2fe5vfJOFq/emMiVffyh1aCoV3lIszDB3P8DfhM4/9vctloVCi3yn6Zi+4S5rncDZsvMbJOZbdq1a1eFTZRSpiz5ZS2MHPhKrnzrB6cGdPrALS+KoDFL+YvS3AYGvN7qoChSHppEGpZqjHPZrrQKE8yZC4zF5laCCJNrV84O4PDA+bnAzmL75IZZD8TrGQxzXb+9651zvc653tmzZ9eh2eIruORX20zWvOki74w+cOOhhHHJkpT2XucHHEkJQEot1ZgUxfK+ly/Xsl3FhMmZ+ypwN5O9ce8HTnHOLanpjr3g7KfAacAI8EPgnc65hwP7/BWwwDl3WW4CxFLn3Plm9mrgRuAEvAkQ3wWOLDcBotly5qI2b+WdBbtDzU3w5C0fVPmAuGQxf1EkRZJcVqPo5zbw5OqzGt2cklRnrr45c5cBb8ALuHYArweW1da8fTlwHwA2AI8CX3HOPWxmV5nZ2bndPg8cYmaPAR9mcuLDw8BXgEeA/wT+SjNZG6/Y0l4HztqfxZd9gXkPdSQ2HyPTVO5EJDZJL6tR9HO7va3BLSlPy3aFV7ZnLkvUM1dffu5FsMu+rcXAYHzv5Ouqva2Vq5cuaJ7VI+KmnjmRWCW5aPvQ8Agrbn2Q8Ymp3/1trcaa847T53TC1NwzZ2Z/mzv9RzO7Nv+vno2VdFqyqJOrly6gs6MdAzo72nn5zBlTAjlIXj5GktUlz0YJ4yKxCtZJ8yUhkAPvc/vlM6envY/vdfqcTrFSExkezZ2qK0uKWrKoc8ovuXkr7yy4387RsUY1KbXqlmfj5ylq+SORWBQrq5GUgG5093jB7fqcTq+iwZxz7uu50xsa1xxJi2KJqXM62hkp8IFwYHsbi1dvZOfoGHM62llxxnx15wcE82zA+9APTs2vOPG3r0/Bm0gM8stqBN/LkIyArtjndLF8Okm+osGcmd1R6orOubNLXS7ZVaoHacU58wvm0f32pT2Mjnm/Bv26RoACuhwtXyOSDbEsp1ihFWdM/5xub2tlxRnzY2yV1KLoBAgz24W3ysJNwPfJK9TrnLsn8tbVWRYnQDR66napX53++ds3j7Bmw5Z9vXC7X9rD8wW69Ts72rl35anRNTaFtHyNSDYkvazG0PDUz+l6jJYk/TGnUdgJEKWCuVbgj4F3AMcCdwI3BevApU3Wgrm4ahlVOlMrTXWN4pTkGXAiIqUkubZemtU8m9U5t9c595/OuYuAE4HHgLvN7IN1bKdUKc5aRpXO1CqWh6H8jElavkZE0irptfWaQcllucxsf+AsvN65HuBa4KvRN0vKiTPHqtKZWmHzM6Lo9k+LNOTZiIgUopzf+JUaZr0BeA3wTeBm59yPG9mwKGRtmBUan2MVJmeu0P2XC9QKFSAGeNl+rQyc2zwFh5VzIiJppZzf+gs7zFqqZ+7dwG+BPwQ+ZJPPiAHOOXdAza2UmsRRy6jaHqT8enT5Ci3+DPDbl/ay4rYH991G1mn5GhFJo6TX1su6UjlzLc65V+T+Dgj8vUKBXPzizLHq75/6BvUDulqSXEsVq1RlchGR5FLOb/xK5sxJcsWdY1XvHqRiRSx9qkwuIhKNWvOV4/4+khI5c1mU1Zy5LORYDQ2PcPktmwuWMIHiNenyP4Q+cvp8zj1+8kMorcdDRKQRCuUrt7e1cvXSynOVs/J9lCT1yJmTFMhKjtWSRZ1s2vYc/3b/9mmXtbVawcrk+R9CI6NjfPiWB7nqGw8zunucA9vb2L0bXrJxOptsdqyISBiF8pXHxveyZsOWij8vs/J9lEZFc+ZEGu2TSxZwzQUL6Whv27ftoFltrDnvuIIfKoU+hJw5nt89jgNGx8Z5yaYuIfbRoYdYvHoj81beyeLVGxkaHon0MYmIADA4CD093nTPnh7vfAIUS2FRaku6aJhVUqvYyhKlGEy5jn9ePXciEpnBQVi2DHbvntw2axasXw99ffG1C1i8emPBfGUtt5gMNa8AIZJ01awgkR/8+edHRsdYceuDLLrqW+q1E5H6WrVqaiAH3vlVq+JpT8CKM+bT3tY6ZVuhou6SbOqZk9QqVmg4KgfNauMTf/pq9d5lzeCg96W6fTt0dcHAQOy9JZIxLS2F63OYeXU8YtbMq+8kXdieOQVzkmrBD6EZE228NLEHm1FkVROm98xVS4FdRiR4+EsypKcHtm2bvr27G7ZubXRrJEU0zCpNYcmiTu5deSpPrj6Lvlmn0ztxHJ0d7RjQ0d7Gfs6bTNHZ0U7fiV3ThhOq9fzucVbc9qCGYtMuwcNfkiEDA96PhKBZs7ztInWgnjnJlHJ1jvyevJHRsbr01ClJOOUSPvwlGZKS4XwNuSaLeuakKZWrc+T35G1dfRZrL1g4pRevrbXyokiavl+DJJRq6OqqbLskSxJeQ2H19XlDqhMT3mm9A7k6HAs/D3lkdAzHZEknjUAkn4I5aVrBIdrNnzidNecdN6XGXRjVzKjdJ01fRPXm56pt2+b1jG3b5p1v9DHQ8Fd6JeU1lAR1OhalCghLsmmYVSRP2KHYtlYrWNA41DBFsyfeJykhPCXDX5InSa+huNXpWBSr3WnAk6vPqrJx02nZr/A0m7UABXOF6Y1V3tDwCP13PMzomLeiRLHZrKHXOWz2LyLlqkmt9BqaVKdj0YgCwv39MDoKa9d6zXMOLr8cOjq8y2Qq5cxJKP393hvJ/xzw31h6U021ZFEnmz9xOltXn8XW1Wcx/PHTQy8xVnCYYvv0NWhLbi8ljcO1ylWTWuk1NKlOxyLqAsLOeYHcunWT3zuXX+6dHx0tHI9KOArmmpjeWPUXep3Den0RpTVvSLlqUiu9hibV6VgsWdTJ1UsX7JsY1tnRPn1UoQZmXo/c8uXe90xLi3e6fPlkT51UR8OsTS4YwPn0xqpe2GGKvqu+xr2/nZxssfjJ/2Xwzk9VnjOX5uFa5apJrfQampSiY+GcF8j5Jib0fVOMcuYKUDBXmN5Y9RMmZ67vc/dx7+PPTb2icyx+2TiDHz+3sjtU3pBUI0Vf/JIt6kCojHLmJBT/jRUUzKGTyoQZppgWyAGYce/u/ehZeSeLrvpW+LpOyhuSSqV1aF5SLxjILV/u/d70h1z1vVObWII5MzvYzL5tZj/LnR5UYJ+FZnafmT1sZj8yswsCl11vZk+a2ebc38LGPoJs0BsrGsH6dfeuPLXifJPnd4/z4a9sDhfQKW9IKqUlzBorjROUImLmzVoN9sT5OXQdHeqZq0Usw6xm9vfAc8651Wa2EjjIOXdF3j5/CDjn3M/MbA7wAHC0c27UzK4HvuGcu62S+037MGsUJUQ0Tby0KI55z8o7Q+3X0d7G5k+cXn5HDZlJJTQ03zgpricZ5bJeKocVXqJz5sxsC/Bm59zTZnYYcLdzruTcZzN7EDgvF9xdT5MFc1EGXXpjFRbVMS+YM1fE1joW6hQB0j1pJm1SeqxD18uUyCU9Z+73nHNPA+ROX1lqZzM7AdgPeDyweSA3/LrWzPaPrqnxi7qESLn1TJtRlMd88H1/xOI/ODjUvkPDIyxevZF5K+9k8eqNWiNRaqeh+capZz3JBtKyXukTWTBnZt8xsx8X+Dunwts5DPgy8OfOOX8M4ErgKOB1wMHAFUWujpktM7NNZrZp165dVT6aeKk2T8QK5LREfcwH3/dHbF19FtdcUDzdc1ZbS7IWvVbuTzb09XnDfN3d3gu5uzsVw36plNIJSqHrZUpiJHqY1cwOAO4GrnbO3Vrktt4MfMQ597Zy95vmYVZQCZFIlMlpacQx/+jQQ/zb/VN/qbe1Gi/ffwbP7x6ftn89l9YJLcW5PyKxSen7phHLekk4SR9mvQO4KPf/RcDt+TuY2X7A14Av5QdyuQAQMzNgCfDjSFubACohEpESM/sadcw/uWQB11ywcEo5kzXnHcdogUAOYvp1rBmQIpVLaS9ooWW9DDjlqNnxNEjKmhHT/a4GvmJmlwDbgbcDmFkvcJlz7lLgfOBk4BAzuzh3vYudc5uBQTObjff62gxc1uD2N1R+CZG1a6cWXdRQaw2K5K64bdsbesyXLOqclli8ZsOWgr+O53S0A9HONpsmpbk/IrHr60t88JZvyaJONm17jsH7t+P/dnXAvz8wQm/3wZoEkUCxBHPOuWeB0wps3wRcmvv/34B/K3L9purnLVabB5q3Nk/dZuB2dRWcbWbdXbEf8xVnzC84o2zFGfOnzTbz8+mAaD5oixynpOf+iEh17vrJLvIHIfxJEArmkkfLeaWISoh46loyJETOXJzHvFjvW8NzWlKa+yMi1Zm38s5pwRx4w2FPqmRSw4TNmYtrmFWqoBIiU0uGwNThz+XLqwi2/ECkSNHduI95oeFXKJ43NzI6xryVd9Z/2LXMcRKRbJnT0V4yzUOSRT1zkjpaqLn4bLMgFfkUkWqpcHAyJHoFiLgomMuOZi/TUuiDtpBWMyaci36ChIhkTkMnWUlBGmaVzCpWMqSZeub8D1T/g7bYT7K9uR9rkU+QEJHMKZbmIckTV505karkl2mZmJhcpaHZ6u4tWdTJvStP5cnVZ9EZIo9Fy/GIiGSTgjlJlWJlWpYvb94yLVC4yGchWo5HRCR7NMwqqdPfP3XWqh/QNWsgB9OHXVvM9g2xBmkmmohI9iiYk1SKu2RIEgXzW4rNRFtxxrQlkEVEJOUUzIlkUH5PXbUz0eIumiwiyabPiGRQMCeSUbXORKvrShsikjn6jEgOTYAQkWmCK234s4T9WcSjo801a1hEptNnRLKoaLCIFKSVNkSkFH1GRE8rQBSgYE6kMs2+0oZIMwuzAoQ+I6IVNpjTMKuIFFRspY0m+v0n0rT8GfEjuRVm/FVkhoZH9u2jz4jkUDAnItNUtNLG4CD09Hg/z3t6vPMikmprNmyZtvZzcBUZrcaTLJrNKhKgafaeYittQN5KG4ODsGwZ7N7tnd+2zTsP0NfX8HYzOAirVsH27dDVBQMD8bRDJOWKrRbjbw/9GSENoZw5qVlWAiBNs5+u7HPb0+MFcPm6u2Hr1ohblyc/sASYNQvWr89WQNekAWtWPmfSYvHqjYwUCOg6O9q5d+Wp+87reYmWcuakIfr7p3ap+wFQ2oIfTbMvrOxKG9u3F75ise1RWrVqaiAH3vlVqxrflqj4Aeu2bd6L0u8JzfjQdlY+Z9Kk0HrPhVaR0Wo8yaBgTqqWpQDIHyLwcz5aWiZzQTTNvoSursq2RylJgWVUmiFgzZOlz5k0WbKok6uXLqCzox3D65G7eumCmgqRS3Q0zCo1yVqdIU2zr1CShjaTNOQblZaWwtGLmfdizaisfc6IhKVhVmmIYNKrL60fsJpmX4W+Pi9w6+72nvTu7imB3NDwCItXb2TeyjtZvHrjlLIGdTcw4AWSQbNmeduzIkk9oQ2Upc8ZkSgomJOaZCUA0jT78PKPhXtnn9fzNTHhnQYCufw6VX99y2YWXfWtaIK6MoFlJjRDwFpAVj5nRKKiYE6qlqUAqNg0++XLNc0+qJJE9EJ1qgCe3z0+rfho3fQVDiwzoxkC1jxZ+pwRiYrqzEnVslZnqL9/6rR6//Gk7XFEJZiIDt6xCX7J5pckKFanCiaLjyqZugp9fZkO3vJl7XNGJAqaACE1U52h5lFJInqxOlU+A55cfVY0DZXM0eeMNCNNgJCGUZ2h5lFJInqhOlVBczra69w6yTJ9zogUp2BOREKrJBHdr1PV0d427bJCxUdFRKQ6CuZEJJRqEtGXLOpk8ydO55oLFqr4qIhIRDQBQkRCqSURfcmiTgVvIiIRiWUChJkdDNwC9ABbgfOdc88X2G8v8FDu7Hbn3Nm57fOAm4GDgf8F3u2ce6nc/WoChEjt4k5EHxoeYZlFaJ0AABQHSURBVM2GLewcHWNORzsrzpivQFFEMinpEyBWAt91zh0JfDd3vpAx59zC3N/Zge2fAtbmrv88cEm0zRURX5yJ6A0vRCwikgJxBXPnADfk/r8BWBL2imZmwKnAbdVcX0TSK5ZCxCIiCRdXMPd7zrmnAXKnryyy30wz22Rm95uZH7AdAow65/bkzu8ANMYi0gTCFCKOzeAg9PRAS4t3OjgYX1tE6mzaMn7NU6I2FSIL5szsO2b24wJ/51RwM125seJ3AteY2R/g1RrNV/RlZWbLcgHhpl27dlX4KEQkScrVpisV7EVqcBCWLYNt27xvuW3bvPMK6JJFAXdVKlnGT+IRWTDnnHuLc+41Bf5uB35hZocB5E5/WeQ2duZOnwDuBhYBzwAdZubPxJ0L7CzRjvXOuV7nXO/s2bPr9vhEpPESW4h41SrYvXvqtt27ve2SDAq4qxJcxs8P6PwSRaOj6qFLiriGWe8ALsr9fxFwe/4OZnaQme2f+/9QYDHwiPOm394FnFfq+iKSPYktRLx9e2XbpXK19qolOeBOcI+hX4LIrynZ0jJZa1JrVydHXKVJDgG+AnQB24G3O+eeM7Ne4DLn3KVm9gbgX4AJvKDzGufc53PXfxWTpUmGgXc5514sd78qTSKSHYkqUdLT4/X05Ovuhq1bG92a7PF71YLB2KxZsH499PWFu42WlsLdSGZeBey41OOxNYBz3iH0TUwokGuEsKVJYgnm4qJgTkQikZIv5NSqR7Cc1IC7wnbF8SMmOLTqU89cYyS9zpyISHb09XmBW3e39+3W3a1Arp7qMYw9MOAF2EGzZnnb41TBYytUZ7EeJXlKzVStZhk/aTwt5yUiUg99fQreotLVVbj3qqsr/G34z82qVV6g1NXlBXJxP2clHlt+L9zul/ZMq7Pol+Sptneuv9+byOD3svnBW0eHd1kty/hJ46hnTkRE6qveCf316lXr6/OGLicmvNO4Azko+tiGPvL303rhnt89XvAmqi3JE3aman//1CFVP6BTaZLkUM+ciCRG3Ou+1lOWHktQ2ceVnz/olwCB6oOnpPaqVaBorluRx7bmqUMZGw8XpFVbkifYy7Zu3WROXKF8uDiX8ZPyNAFCRBKh3HBPmoR9LMEv+APb2zCD0d3j8c/OLSLU46rTRINyif6lLq91kkC9b9vPdQsOkba3tXL10gVFrztv5Z3Fq+EHlLudMDRTNbnCToBQz5yIxC443ANesBBMuk5Tr1bYx5L/BT86NjmE5ie2A3ULUKJ6XJ/71ghdb9vCDStzAenZf8do+ys4cOwFDBhtfwVzfv0MK/7rS6EX0c4/NvnHo9TlQMnrlnst1XLbxRRaU7hcrtucjnZGCgyfdrS38bL9Z9TtdeAH5EGXX66ZqmmjnjkRSYQslT8I81gWr95Y8Ms6qLOjnXtXnhq6ZyfqgC//cc06eoTf/9OH2Gt7S18RaN/zIlf3vT5Ue4odG/94lLocKHrZ9644tWxvb7W3fe/KU4s+nmK9bAY8ufqsgteppjevUvkzVfN/eKTxvZc1Kk0iIqkSzN/xpfXLJMxjCZO0vvP53TA4WLJnxxdV2Yqg/Md10Ju2hArkAMZm7D+lvaUUOzb+9lKXl7oszDJU1d52KcVy2krluvmrnXR2tGN4AWM9AzkoPlN1+XLNVE0bBXMikgjFhnvSOHgQ5rGESVqf8+tdsGwZO0d3F7w8GESECfhqlf+4Wg+obBZl2FmX5YKfUpcXu2z8V+2hepyque1yz2WhNYXDLD+3ZFEn9648lSdXn8W9K0+NZFhdM1WzQcGciMQuS4VJwz6WQl/wQe3jv2PFPTfA7t3M+e1zBfcJBhHV9hqFVehxzXKVzaIMO+uyXPBT6vJCl02Mt/L8Pd51y/X2VnrbYYOyqHvZaqGZqumnCRAiErssFSYN+1j8L/Ips1mffWZywsA9N7Dk0XsAWLHxi1y59Ipp+VPBIKJYwny1ZSvCPK6/u3A+H7klZM5ciKDHl39s8vP/yl0evGzmRDvbvzmf3Y96l5VL7q/ktivJS1yyqDMxwZtkjyZAiEhiZKk2W1WPpURZj6Gv3Vu2VEfUCfMw/XF87X9H+PS3ppdXibvUipL7JQtUmkSkSWQpAMrScE9Vj2VgYGrBXdi30kG5np0wPUr1kP84zj2+k3OPT16PU5Z6e0XKUc+cSIplqdCu5AwOpnqlg6TJ0o8daT4qTSKScWHXVZSUSeL6oSmWpd5ekWI0zCqSUpWsqygiItmlYVaRlNO6iiIi2aRhVpEmkKVCuyIiUh0FcyIplaVCuyIiUj3lzImklEoviIgIKGdOJPVUekFEJJuUMyfSJFR6QUSkuSmYExEREUkxBXMiIiIiKaZgTkRERCTFFMyJiIiIpJiCOREREZEUUzAnIiIikmIK5kRERELKL83aRKVaJcFiCebM7GAz+7aZ/Sx3elCBfU4xs82Bv9+Z2ZLcZdeb2ZOByxY2/lGIiEgz6e+fulSev6Ref3+crRKJr2duJfBd59yRwHdz56dwzt3lnFvonFsInArsBr4V2GWFf7lzbnNDWi0iTUM9MBLkHIyOTl372F8beXRUrw+JV1xrs54DvDn3/w3A3cAVJfY/D/imc253tM0SEfF6WkZHJ9e89b+4OzrUC9Osgmsfr1vn/cHUtZFF4hJXz9zvOeeeBsidvrLM/hcCN+VtGzCzH5nZWjPbP4pGikjzyXIPjHobaxMM6HwK5CQJIgvmzOw7ZvbjAn/nVHg7hwELgA2BzVcCRwGvAw6mRK+emS0zs01mtmnXrl1VPBIRaSb+F/by5V4A19Linaa9B0b5XrXzj1lQ8JiKxCWyYM459xbn3GsK/N0O/CIXpPnB2i9L3NT5wNecc+OB237aeV4EvgicUKId651zvc653tmzZ9fnwYlIpmWtBybLvY2NEjxmy5fDxMRkwK+ATuIWV87cHcBFwOrc6e0l9n0HXk/cPmZ2mHPuaTMzYAnw46gaKiLNp1gPTFoDOuV71c7My5kMHjP/mHZ06BhKvMzF8HPCzA4BvgJ0AduBtzvnnjOzXuAy59yluf16gHuBw51zE4HrbwRmAwZszl3nN+Xut7e3123atKnOj0ZEsiS/B2bt2unn0/rF7Zw3bOybmEjvY4mLc1OPWf55kXoyswecc73l9oulZ8459yxwWoHtm4BLA+e3Ap0F9js1yvaJSPPKag9M1nob45J/rHTsJAniGmYVEUms/v6pPS5+QJfWL+5SvY2Q7scmIgrmREQKylIPTFZ7G0XEE0vOXFyUMycizUz5XiLpEjZnLq6iwSIi0mBZ6m0UkUkK5kRERERSTMGciIiISIopmBMRERFJMQVzIiIiIimmYE5EREQkxRTMiYiIiKSYgjkRERGRFFMwJyIiIpJiCuZEREREUkzBnIiIiEiKKZgTERERSTEFcyIiIiIpZs65uNvQMGa2C9gWdztqdCjwTNyNSAAdB4+Og0fHwaPj4NFx8Og4TErrseh2zs0ut1NTBXNZYGabnHO9cbcjbjoOHh0Hj46DR8fBo+Pg0XGYlPVjoWFWERERkRRTMCciIiKSYgrm0md93A1ICB0Hj46DR8fBo+Pg0XHw6DhMyvSxUM6ciIiISIqpZ05EREQkxRTMJYyZHWxm3zazn+VODyqwzylmtjnw9zszW5K77HozezJw2cLGP4r6CHMscvvtDTzeOwLb55nZ93PXv8XM9mtc6+sn5GtioZndZ2YPm9mPzOyCwGWpfk2Y2ZlmtsXMHjOzlQUu3z/3/D6We757Apddmdu+xczOaGS76y3EcfiwmT2Se/6/a2bdgcsKvkfSKMRxuNjMdgUe76WByy7KvY9+ZmYXNbbl9RXiOKwNHIOfmtlo4LIsvR6+YGa/NLMfF7nczOza3HH6kZkdH7gsM68HnHP6S9Af8PfAytz/K4FPldn/YOA5YFbu/PXAeXE/jkYeC+A3RbZ/Bbgw9/9ngb+M+zFFdRyAPwSOzP0/B3ga6Ej7awJoBR4HXgXsBzwIHJO3z/uBz+b+vxC4Jff/Mbn99wfm5W6nNe7HFOFxOCXwOfCX/nHInS/4HknbX8jjcDHwTwWuezDwRO70oNz/B8X9mKI6Dnn7fxD4QtZeD7nHcjJwPPDjIpf/CfBNwIATge9n7fXgnFPPXAKdA9yQ+/8GYEmZ/c8Dvumc2x1pq+JR6bHYx8wMOBW4rZrrJ0zZ4+Cc+6lz7me5/3cCvwTKFppMgROAx5xzTzjnXgJuxjseQcHjcxtwWu75Pwe42Tn3onPuSeCx3O2lUdnj4Jy7K/A5cD8wt8FtbIQwr4dizgC+7Zx7zjn3PPBt4MyI2hm1So/DO4CbGtKyBnPO/Rdeh0Yx5wBfcp77gQ4zO4xsvR4UzCXQ7znnngbInb6yzP4XMv1NOpDrTl5rZvtH0cgGCXssZprZJjO73x9uBg4BRp1ze3LndwCd0TY3MhW9JszsBLxf648HNqf1NdEJPBU4X+h53LdP7vn+Fd7zH+a6aVHpY7kErzfCV+g9kkZhj8Of5V7vt5nZ4RVeNw1CP5bccPs8YGNgc1ZeD2EUO1ZZej0wI+4GNCMz+w7w+wUuWlXh7RwGLAA2BDZfCfwc78t8PXAFcFV1LY1enY5Fl3Nup5m9CthoZg8Bvy6wX2Knbtf5NfFl4CLn3ERuc6peE3mswLb857HYPmGumxahH4uZvQvoBd4U2DztPeKce7zQ9RMuzHH4OnCTc+5FM7sMr9f21JDXTYtKHsuFwG3Oub2BbVl5PYTRDJ8PCubi4Jx7S7HLzOwXZnaYc+7p3BfzL0vc1PnA15xz44Hbfjr374tm9kXgI3VpdETqcSxyw4o4554ws7uBRcC/43Wnz8j11swFdtb9AdRJPY6DmR0A3Al8NDec4N92ql4TeXYAhwfOF3oe/X12mNkM4EC8YZcw102LUI/FzN6C9wPgTc65F/3tRd4jafzyLnscnHPPBs5+DvhU4Lpvzrvu3XVvYWNU8tq+EPir4IYMvR7CKHassvR60DBrAt0B+LNqLgJuL7HvtDyI3Je9nzO2BCg4wyclyh4LMzvIHzY0s0OBxcAjzstwvQsvp7Do9VMizHHYD/gaXm7IrXmXpfk18UPgSPNmJu+H98WUP/sueHzOAzbmnv87gAvNm+06DzgS+EGD2l1vZY+DmS0C/gU42zn3y8D2gu+RhrW8vsIch8MCZ88GHs39vwE4PXc8DgJOZ+qoRpqEeV9gZvPxkvvvC2zL0ushjDuA9+RmtZ4I/Cr3AzdLrwfNZk3aH16uz3eBn+VOD85t7wX+NbBfDzACtORdfyPwEN4X9r8BL4/7MUV5LIA35B7vg7nTSwLXfxXel/djwK3A/nE/pgiPw7uAcWBz4G9hFl4TeLPRforXc7Aqt+0qvKAFYGbu+X0s93y/KnDdVbnrbQHeGvdjifg4fAf4ReD5vyO3veh7JI1/IY7D1cDDucd7F3BU4Lrvzb1OHgP+PO7HEuVxyJ3vB1bnXS9rr4eb8Gbvj+P1tl0CXAZclrvcgOtyx+khoDeLrwetACEiIiKSYhpmFREREUkxBXMiIiIiKaZgTkRERCTFFMyJiIiIpJiCOREREZEUUzAnIolnZs7Mvhw4P8PMdpnZ/9/e/YXePcdxHH8++5WykBatmGy5wLbcyNRi/0oUYRItJRdaUYYyUdLixkoyCRfa1fwrmS1MMraFIfs/k9LWaiX8wpqlyXq7OB/tWGfb+Q0X3+31qNP5nHM+n/fne25On96f8/2832mvb1Qf+R/nX6wOPGxZ/WwMcVaoW9Tv1H2tvUWdMcbrmdvOzBr02VR1g3pQfWAscSOim1IBIiK64AAwTT29qn4HrqF3ziIAVbWKAYemDtIOT7YOlzv7V6pq6IVYVc1r1zAbeKiqbjjBaecCo8DnAz4bBe7j8IHZEXGSS2YuIrpiNXB9a/+j+ol6l/p8a09oGbCt7TFDnaR+o74AbAIuUOer29Ud6pK+WNepm9rYNX3zT1HXqrvUhX39f2vPs9X1be6d6kvq0L+x6hXqOnWjulqd0N5/sMXbqi5XLwLuBhYNyupV1Q9V9RXw57BzR0S3JTMXEV3xOvB421q9DFgGXD2g33PAuqqap44AZ9AraXQxvVPe71XPo1ez83LgF+AD9WbgU3r1PGdW1W51fF/cS4A5wJnAt+qL1VcXuZkOTAH2AO8DtwBvHu+LtfJKS+md3j+q3gE8CSwAHgYurKo/1LOr6lf1ZWC0qp49XuyIOPllMRcRnVBV29RJ9LJy7x2j61zgzjbmELCv1V7cU1V/b0teAaytqp8A1FeAmcAhYH1V7W7jf+6L+271itcfVH8EJtArH9Tvy6ra1WK+BlzFEIs54FJgKvBhbxeYkb7YXwPL1ZXA20PEiohTTBZzEdElq4Cngdn0ataOxYG+tkfpI3C0GocH+9qHGPz7eeTYYeslCmyrqkGZxmuBWcBNwGPqtCFjRsQpIv+Zi4guWQY8UVXbj9FnDXAPgDqinjWgzxfALPWcthU7H1gHbGjvT27jxw8YeyzT1cntv3K3A58MOW4ncL46vc17WrsrdQSYWFUfAYuAc4FxwH56270REVnMRUR3VNXeqlp6nG73A3PU7cBGetuXR8b5HngU+BjYCmyqqpVt23UB8Ja6FXhjjJe4AXgK2AHsBlYMM6ht394KPNPm3QxcSS/796q6jd6NG0uqaj+wErhN3XzkDRDqRHUvsBBYrO5Vx43xe0REh1g17C5AREQczX9w3EhExAlJZi4iIiKiw5KZi4iIiOiwZOYiIiIiOiyLuYiIiIgOy2IuIiIiosOymIuIiIjosCzmIiIiIjosi7mIiIiIDvsLH/AX1QxB3DkAAAAASUVORK5CYII=)
绘制lamda=10的决策边界
theta_10 = opt_minimize(theta, X, y, 10).x
_, ax = plt.subplots(figsize=(10,6))
ax.scatter(x=data2[data2['quality assurance']==1]['Microchip Test 1'], y=data2[data2['quality assurance']==1]['Microchip Test 2'], c='red', marker='o', label='y=1')
ax.scatter(x=data2[data2['quality assurance']==0]['Microchip Test 1'], y=data2[data2['quality assurance']==0]['Microchip Test 2'], c='blue', marker='x', label='y=0')
plot_bound(theta_10, ax)
ax.set_xlabel('Microchip Test 1')
ax.set_ylabel('Microchip Test 2')
ax.legend()
plt.show()