diff --git a/Exercise1/exercise1.ipynb b/Exercise1/exercise1.ipynb index 6f921a48..a6f2813c 100755 --- a/Exercise1/exercise1.ipynb +++ b/Exercise1/exercise1.ipynb @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -108,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -126,7 +126,7 @@ " Return the 5x5 identity matrix.\n", " \"\"\" \n", " # ======== YOUR CODE HERE ======\n", - " A = [] # modify this line\n", + " A = np.eye(5) # modify this line\n", " \n", " # ==============================\n", " return A" @@ -149,9 +149,24 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 0., 0., 0., 0.],\n", + " [0., 1., 0., 0., 0.],\n", + " [0., 0., 1., 0., 0.],\n", + " [0., 0., 0., 1., 0.],\n", + " [0., 0., 0., 0., 1.]])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "warmUpExercise()" ] @@ -173,9 +188,33 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise linear-regression\n", + "\n", + "Login (email address): tjzhengbochao@gmail.com\n", + "Token: AGtLb2qEtTqc05ap\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Warm up exercise | 10 / 10 | Nice work!\n", + " Computing Cost (for one variable) | 0 / 40 | Your answer is incorrect.\n", + " Gradient Descent (for one variable) | 0 / 50 | Your answer is incorrect.\n", + " Feature Normalization | 0 / 0 | Your answer is incorrect.\n", + " Computing Cost (for multiple variables) | 0 / 0 | Your answer is incorrect.\n", + " Gradient Descent (for multiple variables) | 0 / 0 | Your answer is incorrect.\n", + " Normal Equations | 0 / 0 | Your answer is incorrect.\n", + " --------------------------------\n", + " | 10 / 100 | \n", + "\n" + ] + } + ], "source": [ "# appends the implemented function in part 1 to the grader object\n", "grader[1] = warmUpExercise\n", @@ -199,7 +238,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -236,7 +275,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -270,7 +309,9 @@ " fig = pyplot.figure() # open a new figure\n", " \n", " # ====================== YOUR CODE HERE ======================= \n", - " \n", + " pyplot.plot(x, y, 'ro', ms=10, mec='k')\n", + " pyplot.ylabel('Profit in $10,000')\n", + " pyplot.xlabel('Population of City in 10,000s')\n", "\n", " # =============================================================\n" ] @@ -288,9 +329,22 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "plotData(X, y)" ] @@ -306,13 +360,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "?pyplot.plot" ] }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(97,)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y.shape\n", + "y.shape" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -352,7 +427,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -377,7 +452,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -419,8 +494,10 @@ " J = 0\n", " \n", " # ====================== YOUR CODE HERE =====================\n", - "\n", - " \n", + " x1 = X @ theta\n", + " x2 = x1 - y\n", + " x3 = np.dot(x2, x2)\n", + " J = x3/(2*m)\n", " # ===========================================================\n", " return J" ] @@ -434,9 +511,23 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "With theta = [0, 0] \n", + "Cost computed = 32.07\n", + "Expected cost value (approximately) 32.07\n", + "\n", + "With theta = [-1, 2]\n", + "Cost computed = 54.24\n", + "Expected cost value (approximately) 54.24\n" + ] + } + ], "source": [ "J = computeCost(X, y, theta=np.array([0.0, 0.0]))\n", "print('With theta = [0, 0] \\nCost computed = %.2f' % J)\n", @@ -457,9 +548,36 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 35, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise linear-regression\n", + "\n", + "Use token from last successful submission (tjzhengbochao@gmail.com)? (Y/n): n\n", + "Login (email address): tjzhengbochao@gmail.com\n", + "Token: JdVE3XWMZDVC0Gbb\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Warm up exercise | 10 / 10 | Nice work!\n", + " Computing Cost (for one variable) | 40 / 40 | Nice work!\n", + " Gradient Descent (for one variable) | 0 / 50 | Your answer is incorrect.\n", + " Feature Normalization | 0 / 0 | Your answer is incorrect.\n", + " Computing Cost (for multiple variables) | 0 / 0 | Your answer is incorrect.\n", + " Gradient Descent (for multiple variables) | 0 / 0 | Your answer is incorrect.\n", + " Normal Equations | 0 / 0 | Your answer is incorrect.\n", + " --------------------------------\n", + " | 50 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[2] = computeCost\n", "grader.grade()" @@ -494,7 +612,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": {}, "outputs": [], "source": [ @@ -547,13 +665,19 @@ " \n", " for i in range(num_iters):\n", " # ==================== YOUR CODE HERE =================================\n", - " \n", + " x1 = X @ theta\n", + " x2 = x1 - y\n", + " x2t = np.transpose(x2)\n", + " x3 = x2t @ X\n", + " x3t =np.transpose(x3)\n", + " theta = theta - alpha * x3t / m\n", "\n", " # =====================================================================\n", " \n", " # save the cost J in every iteration\n", " J_history.append(computeCost(X, y, theta))\n", " \n", + "# print(J_history)\n", " return theta, J_history" ] }, @@ -566,9 +690,18 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Theta found by gradient descent: -3.6303, 1.1664\n", + "Expected theta values (approximately): [-3.6303, 1.1664]\n" + ] + } + ], "source": [ "# initialize fitting parameters\n", "theta = np.zeros(2)\n", @@ -593,9 +726,22 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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6yobGv9TCjqz8c9n8ez0QQlp/CFNegA3PPsxn3y9I6bnPOEwF9ef06PF56mvr+ftt9+moqKCG264gVWrVrFkyRI6derEO++8Q11dHQMHDuSMM87giCOO4KmnnsLlcrF161b69+/PyJEjAfj000+5//77ufPOO4Nep3379rz++uts3bqVUaNGsWrVKjp06MC8efNYsGABv/vd77jiiit49dVXOfLIIwOUQ9evX8/rr79OdnY2o0ePprS0lEGDBvHVV19x5plnsmHDBm655RYWLVrEwIED2blzJ+3bt+fee+/lzDPP5LrrrmPv3r0BWcTWr1/P/fffz1tvvYWI8Itf/IJTTz2VAw88kM8//5xHHnmExYsXc8EFF/DEE080qJYqSqLwDzF1AwuB5cBWIBe4CNhia2O1hF176hlT/hbvfvXfhrIze+Rxx8V9OCAr8c/jaeEAUplRo0YB0Ldv3wbRthdffJGqqipWrFgBWKJxn3/+OV27duXaa6/l1VdfJSMjg3//+98N0tDdu3enf//+Ia9z4YUXArB27Vo++eSTBr2ePXv2MGDAgKDS0ffee2/D8SNHjiQ7OxuAVatWNZJ73rFjB7W1tQwcOJCrrrqKSy65hFGjRtG1a1dOOukkLr/8cjweD7/61a/o1atXI7tef/11fv3rXzeopI4aNYrXXnuNkSNHcuSRRzbU9/1+FCWR+GbhqgTGAZOANUB3YBNQDrQXobKyslnqAdt3ezjvrjVUf79/nUJx367MO6+QzIxApd5EkRYOIBZP6vHCK+PsK/MsItxxxx2ceeaZjeo+8MADbNmyhfXr1+NwOMjPz2+QXfaVmQ6Gd7+IcPrpp/PII4802v/ee+9FdTzAvn37ePPNNxscgpeysjKGDx9ORUUF/fv3Z9WqVQwePJhXX32VlStXMnbsWK655hrGjRvXcEy4leb+Etc6BKQkg9FjxrCkvJwJHg/jgGcgIIXsTcBIaHIK2a076xhx++t8u2O/fPplA/P544gTgkq0JxqdA0gCZ555JnfddRcee9zxs88+48cff2T79u106dIFh8PBSy+9xKZNkZa+BNK/f3/eeOMNqqurAdi1axefffZZ1NLRAGeccQYLfSa7vLmP3W43J554IrNmzaJfv35s3LiRTZs20aVLFyZNmsSECRN49913G51r8ODB/P3vf2fXrl38+OOPPPXU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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "# plot the linear fit\n", "plotData(X[:, 1], y)\n", @@ -620,9 +766,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "For population = 35,000, we predict a profit of 4519.77\n", + "\n", + "For population = 70,000, we predict a profit of 45342.45\n", + "\n" + ] + } + ], "source": [ "# Predict values for population sizes of 35,000 and 70,000\n", "predict1 = np.dot([1, 3.5], theta)\n", @@ -641,9 +798,34 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Submitting Solutions | Programming Exercise linear-regression\n", + "\n", + "Use token from last successful submission (tjzhengbochao@gmail.com)? (Y/n): n\n", + "Login (email address): tjzhengbochao@gmail.com\n", + "Token: 5FRF7r1G8QIpeeHb\n", + " Part Name | Score | Feedback\n", + " --------- | ----- | --------\n", + " Warm up exercise | 10 / 10 | Nice work!\n", + " Computing Cost (for one variable) | 40 / 40 | Nice work!\n", + " Gradient Descent (for one variable) | 50 / 50 | Nice work!\n", + " Feature Normalization | 0 / 0 | Your answer is incorrect.\n", + " Computing Cost (for multiple variables) | 0 / 0 | Your answer is incorrect.\n", + " Gradient Descent (for multiple variables) | 0 / 0 | Your answer is incorrect.\n", + " Normal Equations | 0 / 0 | Your answer is incorrect.\n", + " --------------------------------\n", + " | 100 / 100 | \n", + "\n" + ] + } + ], "source": [ "grader[3] = gradientDescent\n", "grader.grade()" @@ -1285,7 +1467,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1299,7 +1481,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.6" + "version": "3.10.4" } }, "nbformat": 4,