diff --git a/boston_housing.ipynb b/boston_housing.ipynb index beab562..3f3eb99 100644 --- a/boston_housing.ipynb +++ b/boston_housing.ipynb @@ -35,10 +35,8 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, + "execution_count": 8, + "metadata": {}, "outputs": [], "source": [ "# 载入此项目所需要的库\n", @@ -57,11 +55,17 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Boston housing dataset has 489 data points with 4 variables each.\n" + ] + } + ], "source": [ "# 载入波士顿房屋的数据集\n", "data = pd.read_csv('housing.csv')\n", @@ -100,28 +104,50 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Statistics for Boston housing dataset:\n", + "\n", + "Minimum price: $105,000.00\n", + "Maximum price: $1,024,800.00\n", + "Mean price: $454,342.94\n", + "Median price $438,900.00\n", + "Standard deviation of prices: $165,171.13\n" + ] + } + ], "source": [ "#TODO 1\n", "\n", "#目标:计算价值的最小值\n", - "minimum_price = None\n", + "# minimum_price = None\n", + "minimum_price = min(prices)\n", + "\n", "\n", "#目标:计算价值的最大值\n", - "maximum_price = None\n", + "# maximum_price = None\n", + "maximum_price = max(prices)\n", + "\n", "\n", "#目标:计算价值的平均值\n", - "mean_price = None\n", + "# mean_price = None\n", + "mean_price = np.mean(prices)\n", + "\n", "\n", "#目标:计算价值的中值\n", - "median_price = None\n", + "# median_price = None\n", + "median_price = np.median(prices)\n", + "\n", "\n", "#目标:计算价值的标准差\n", - "std_price = None\n", + "# std_price = None\n", + "std_price = np.std(prices)\n", + "\n", "\n", "#目标:输出计算的结果\n", "print \"Statistics for Boston housing dataset:\\n\"\n", @@ -152,7 +178,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题 1 - 回答:" + "### 问题 1 - 回答:\n", + "- RM 增大,MEDV 会增大。\n", + " \n", + " 理由:平均房间数量增大,整体来说,房屋的平均面积会增大(房间的面积不会特别小,但可以比较大),而房屋的价格是和房屋的面积成正比例的关系。\n", + "\n", + "\n", + "- LSTAT 增大,MEDV 会降低。\n", + "\n", + " 理由:如果该地区的业主属于是低收入阶层,工资是无法承担较高的房价的,说明这个地区的房价相对较低,可以被他们承受。但也不排除波士顿有没有分配住房的情况发生,如果有这样的情况,那么关系就不是特别大了。\n", + "\n", + "\n", + "- PTRATTO 增大,MEDV 会减小。\n", + "\n", + " 理由:越是精英的阶层,家庭里面的孩子上学更偏重于精英学校,精英学校的管理偏向学生较少;反而普通学校里面,一个老师带的学生会更多。所以,PTRATTO 增大,说明这个地区普通家庭人口更多,所能承担的房价也会下降。" ] }, { @@ -170,17 +209,16 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, + "execution_count": 11, + "metadata": {}, "outputs": [], "source": [ "# TODO 2\n", "\n", "# 提示: 导入train_test_split\n", + "from sklearn.cross_validation import train_test_split\n", "\n", - "X_train, X_test, y_train, y_test = None" + "X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=30)" ] }, { @@ -199,7 +237,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题 2 - 回答:" + "### 问题 2 - 回答:\n", + "\n", + "使用一定的数据进行训练,来外的一部分数据进行测试,可以保证得到的算法模型具有一定的泛化能力。\n", + "\n", + "如果用模型已经见过的数据,则无法验证得到的模型是否具有推广性,极有可能出现 **过拟合** 的现象,这样,模型无法应用在其他没有见过的数据上,也就没有应用价值了。\n" ] }, { @@ -231,10 +273,8 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, + "execution_count": 12, + "metadata": {}, "outputs": [], "source": [ "# TODO 3\n", @@ -243,8 +283,9 @@ "\n", "def performance_metric(y_true, y_predict):\n", " \"\"\"计算并返回预测值相比于预测值的分数\"\"\"\n", + " from sklearn.metrics import r2_score\n", " \n", - " score = None\n", + " score = r2_score(y_true, y_predict)\n", "\n", " return score" ] @@ -291,11 +332,17 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model has a coefficient of determination, R^2, of 0.923.\n" + ] + } + ], "source": [ "# 计算这个模型的预测结果的决定系数\n", "score = performance_metric([3, -0.5, 2, 7, 4.2], [2.5, 0.0, 2.1, 7.8, 5.3])\n", @@ -306,7 +353,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题 3 - 回答:" + "### 问题 3 - 回答:\n", + "\n", + "我觉得这个模型已经相当成功地莫属了目标变量的变化,因为预测的结果的决定系数 R2 为0.923,相当接近1(决定系数越接近1,说明模型越完美)" ] }, { @@ -330,12 +379,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { - "collapsed": true, "scrolled": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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I9HFUkop5UgPpFNYWUivtF42wU5+PmRmwnffQSAAM2fCuefCvffCn/5ks+Bdeimcdprto2SMrV0qLISkJNt3KTMT/P5E75pSSm1v1qxsZs4sYOPGAL171zFjxjouuqi4vavr3bt3eNmyZV8DXH311flpaWnhmTNnbnLPE4lEMMbg9XrjruPFF19c2dJ2fv/73xe1t4xu1dXVcvXVV/dfuHDhNwMHDqyvrq6Wb7/9NrAj62xp/zpSt6hJAggX9KF80tFkvP0+KSt+ZHNlh3y/SimlOoiIkOJPYdXWVZhoTVBqKowaZQOmkhLo2xcefBCefdbWNN10E5xwgm2WB5CWBllZ22qXvvxSa5eUUl3PrFnZXHXVADZsCGAMbNgQ4KqrBjBrVofU0LgtXbo0OHjw4JFTpkzpP3LkyBGrV6/2n3nmmQNGjRo1fK+99hp5zTXX9InOO27cuKEff/xxcn19Penp6WMvueSSgqFDh44YO3bssHXr1vkALr/88vyZM2fmRee/5JJLCkaPHj184MCBo/7xj3+kApSVlXmOOeaYPYcOHTpi0qRJg0aNGjX8448/TnaXq7i42GuMIS8vLwSQnJxs9t5771qA1atX+4444og9hwwZMmLo0KEj3n333VSAG264odfgwYNHDh48eOStt96a19T+Pf/88xljx44dNmLEiOHHH3/8HmVlZR0e03SbIAmg+IoLkVCI/GdfZ3PRKsKRcKKLpJRSyiXZn0x5XTkl1SXbRnq9NiAaORLCYdi6FfbZx9YkPfSQzXJ3+eVw+umwcKFdJhCwtUuZmTa4WrrU9l0qKoL6+sTsnFJq9zFtWj/2339ok8MVVwykpqbxdXZNjYcrrhjY5DLTpvVrb3G+//77pAsvvHDzN9988/WgQYPq//jHP65dunTpN998881X8+fPz1i0aFFS7DIVFRXen/3sZ+XLly//er/99qt48MEH4zaFM8awZMmSb2699dY1M2fOzAe444478vLy8uqXL1/+9XXXXbfxm2++SYldrqCgIHTooYeW9evXb+9JkyYNevjhh7PDYXttPn369AFHHHFE2YoVK75eunTp12PHjq2eP39+ygsvvNDziy+++GbhwoXfPPbYY7kLFixIjt2/QCBg7rrrrj4ffvjhiq+//vqbUaNGVd1222157T12TelWQVL9yGFUHHYgWfP+gXz/PRW15YkuklJKqRhpgTRWbl25/Y2s9HSb1KFXLygutsHO4YfDa6/BbbfZZnZnnw2/+hUsW2aXEbG1S+6+S19+aR9Uu3w5rFplU4uXlNjappoaG4gppVRnqquL30eoqfE7qF+/frWHHXZYVfTz448/nj1ixIjhI0eOHPHDDz8k/fe//02OXSYpKSly+umnlwGMGzeuauXKlXGbwk2ePHkrwEEHHVS1du3aAMAnn3ySdtZZZxUDHHjggdV77rlndbxlX3rppZVvvPHGinHjxlXde++9vadMmTIAYMGCBem/+c1vNgP4/X6ys7Mj7733XvqkSZMvZwc6AAAgAElEQVRK0tPTI1lZWZGJEydunT9/flrs/r377rtp3333XdJPfvKTYcOGDRvx4osv9ly1alWz/azao9v0SYoquXw66aecR5+/v0vRsH3I3GO/RBdJKaWUS8AboLK+kk0Vm8jPyG880euFAQNsk7rvvoPqapvp7tRT4fjj4amn4JFHbGa8k06yNUz5zjoCATsYYwOh2lqbQtydFc8YG1iJQDBon8uUlGSHQMDWWvl8tp+Tp1vdR1RKdaTHH1/T7PT8/NFs2LB90NGnTx0LFy7v6OIkJyc3ZCxbsmRJ8OGHH+71+eeff5OTkxM+8cQTB1VXV28XnPl8voY2yl6v14TD4bgBXFJSUiR2HtOG5s3jx4+vHj9+fPW0adO2jBo1ahSwChoyyzVobp3u/TPGcNhhh5X9/e9//7HVhWiHbvcXoOaQA6gaO5Jef/8Hxd8uIRzSZhdKKdXVZAQyWFO2htpQbRMzZMDee0PPnrZWqa7OBjLTp8M//gHTpsHrr8Mxx8Cdd9qaonnzYMIEGD4cjjrKzpeWZpvlRYesLPuakWGDoKoq20Tvhx9szdPSpbYW6rPPYNEi+Oor+P57WLfOlqOszC5TX699oJRSTZsxYx1OcNEgKSnCjBnrOnvTW7du9aampoazsrLCq1at8n/wwQcdnsnswAMPrHj22WezABYuXJj8ww8/bFdTVVxc7HnzzTfTop8XLlyYkp+fXwdwwAEHlN111125AKFQiOLiYs+ECRPKX3/99ayKigopLS31vPXWWz0OP/zwitj1TpgwoWLBggVpX3/9dQBs/6glS5ZoTVKLPB6KLzqXvhf9lp7vfEj5qEPpUbBnokullFLKxevx4vV4WVO2hr2y94o/k88He+xhA6XvvrNN5TIybJDzu9/Zpnd//jP89a/w9NO29ihaa7R+Pdxwg30/adL26xaxNUfNCYftUF5ug7Bw2C4XrY0yxtZGJSVtq5UKBhvXRvm6359ZpVQrRLPYdWB2u9Y6+OCDqwYPHlwzZMiQkf37968dN27cdoHGjrr22msLJ0+ePGjIkCEjRo8eXbXXXntVZ2dnN2rLbIyR22+/vc/FF18cTEpKiqSmpoZnz569EuCRRx5Zfe655w6cM2dOrtfr5S9/+cvKCRMmVJ166qlb9tlnnxEA06ZNK9p///2rly5d2igA6tevX+gvf/nLqtNPP33P+vp6Abj55pvXjR49uom7bu0jbaku6yrG7DvGzJ43m8ykzPgz1NbS/9BJEAqxZs6fGPzTk2wTDqWUShARWWSM6Vbtf0eMGWFe/tfLeKR9jRKMMZTUlDAqb5RNCd6c+nrbv6ioyAZK7rTfK1bYNOG1cf4+9uoF773XeU3nQqFtwVkoZJ/7JDEtVtwBVHJy42Z90UEptVPsyLl48eLFK8eMGbO5o8u0K6qvr6e+vl5SUlLMkiVLgscee+yQlStXLvHvgo9kWLx4cc6YMWMGxo7vnmfmYJCS886gzw13Yt57n9DQA/D1KUh0qZRSSrmICMm+ZFZuXcnI3JFIbHDh5vfDXnvZBA3ff2+DnvR0O23IENscL55Nm2yK8ZwcyMuD3Fz7Gm/Iymp7MBUNcoJNtPQwxgZPNTU2cURs/yiw24zWSCUl2UAqWgsVrZHSG31KqS6ktLTUe9hhhw0JhUJijOH+++9ftSsGSM3pnkESUH7GKeTc/zh9Xnqb8mNOIiu3l96tU0qpLibZn0xxVTHF1cX0TOnZ8gLZ2baf0cqVto9QRoY9t/fpY5vYxcrMhDPPtJnxCgth7Vqb/a6kZPt5fb6mg6ncXFsrlZdnm/u1NpgSgbfesg/I3bDBlvPqqxs3AYwGUtXVjQOpaBDVVKKJaCAVfdVASim1k+Tk5IS/+uqrbxJdjs7UfaOGzExKzjiRvD/NZvWCj8gaMGxbBiSllFJdRlrQpgTPTMrE52nFn6VAAAYPhi1bbMIFn88GHjfcYGtsopKS4H//N36fpLo623SvqGhbAFVYuO3zmjU2ccPWrdsv6/NtC6LiBVPumqn/9/8alyteXykRG+g0dxfWGNvksKrK9pEKhRoHUdHXaADlDqTctVIaSCmlVKt03yBJhNLzppD91+dIf+FV6g84En9ubvN/hJRSSu100ZTghRWF26cEb4qIrfVJT7eB0sEHw8yZ8Mc/Nl1j02ijASgosENzamubD6ZWrYLPP48fTPn9to9S7HOZampsWWtrba1YvCElpXFtVWsSTTQVSLmbMboDqTffhLvuspn7CgrgxhvtA3uj87mDr9j3zU2L914ppXYx3TdIAkyvPLaePJGcJ55n64ql9CjoZ5/qrpRSqkvJDGaypmwNPVN6EvS1IZNrMAjDhtmgxeOBI4+E1NSOK1gwCH372qE5tbWNg6fo8Oij8ecvK4Prr29+nampNmCKvrqHeONix0ffu4OrSMQGTy++aAO1aA3X2rVw2WW2puuYY7YFNrFBVlPc88VLCOXxbAuc3O+jnwHeeAP+9KdtQe5vfgMnn2ynuwevd9t793qaWn9z45VSqgndOkjC72freWeQ/dyr8NzzMHSMbQLRVAdbpZRSCeERDz6Pr/mU4E0Rsef2aK1SSYk9z3u924bOviAOBu1NuNgbca+/Hr+vVO/e8Mwztg9SdKisbPlzUVHjca3JUBsIbB9MLV68fTbAmhq4+25bCxVtphcINH51Dy2Ni2bx83hsOaNljff+9dfhppsaN0u8/nrbT2vixMbzRiKN9zs2OIv3XbunuZeNF3jFDvPmwT332DLl58O118Ipp2zbjjv4in52l6Ol17bM6379299gxgzbNLRfP/jDH2z/u6bW3dz7po5bezz9tP3uVq+G/v3h1lvhrLM6Zt1K7UTdO0gCInsMonTi4WS+9g51F20gsD4PBg1KdLGUUkrFSA+mU1RZRK/UXqQH09u+guRk+yDZzZvthX5dnR0qK+2FdZT7ojp6cewOqDqy305TfaWuuablpn4tMcY2rXMHVLGBVexQWWmHeOnSwR63u+/esXLF8vlaDqiWLds+Q2FNjb3A/vLLxgkqYp9DtSOfo99/tL+W19u4/9bbb8Mtt2z7/tatg9/+1gbiEyc2Dvbc30s8sUGI+3lb8V6b89ZbcPvt28q1ejVceKFNaHLssdvX7DVXyxdPbFNPd3nc02Lne/31xjWUq1bBBRfYLJPRWsHocXYHp7G1fU3VPMbWBraWK3DbG0a3fsGuZf/99x/6P//zPxtOPfXUsui4mTNn5q1YsSJp7ty5q5taLiUlZZ+qqqovV65c6b/ooov6vfXWWz/EW/fdd9+95tBDD61qaj0zZ87Mu+qqqzanp6dHAA477LC9XnrppR9zcnLCTS3TGosXLw5Onz59YFlZmbeurk7Gjx9f8eyzz67akXV2hG4fJJGSQsnU0+jx6tuEn/8b5Pa2d/CSt3swsFJKqQRL8aewqnRVyynBm+LxbEuc4BZtZhZ9QGz02UbRQKquzgYONTW2X0/shWr0s/ui2n2R15Ron6jmstu1l4htUtee5oUTJsSv4erTx/ZVqquzxyF2iB6reOPbMi52WlMp3Kur4aOPtj2Hqr6+8TOpEqGmxtZ6/fnPjX8D8QLupoKC1rw2t77nn28ceEfLdffd9iZBU/3IYmuSWupjFjuve3y81/vui1+uW26xNZjuRCLu12jAHAw2/v8UL9hz1wq6awCbOoavvmpr/6qrAfBDC537Os6sz2Zlz/xgZsHGio2B3mm962YcOmPdRT9p/8NkJ0+evOXZZ5/NdgdJL730Uvadd965tjXLDxw4sD5egNRaDz/8cK/p06cXR4Ok999//7v2rsvt0ksv7X/55Zdvmjp16laAhQsX7vBFeigUwreDWa27f5AEhMaOZuuEA8l46VU471f2TtBebWzOoZRSqtO1OSV4a3k8LSc+iDKmcTDlflhsNJiKBgs1NdtSdsferY9eqB1xhO3n4774i03z3VxZOkLsei67DG6+efsariuvtMcpGNy5/XaaCtry82H+/PjLRANfd+DU0Z/vu6/pbR9xhP1tRJNzxL53f3a/1tXFH9/cMtGgMPrZueDfTnk53H9/+76DzlRSYmu6WiNa8+hu6tnUEK+JZ2yN5V//2vTx6kSzPpuVfdU7Vw2oCdV4ADZUbAhc9c5VAwDaGyidffbZJbfddltBdXW1JCcnm+XLlwcKCwv9Rx99dEVpaann2GOP3au0tNQbCoVkxowZ66NBR9Ty5csDJ5xwwuBvv/32q4qKCjnjjDMGrVixImnw4ME1NTU1Df/ZzzrrrP6LFy9Oramp8UyaNKnkvvvuW3/LLbfkFRYW+g877LAhWVlZoQULFqwoKCgY/fnnn3/Tp0+f0E033dTr6aefznHKWTRjxozC5cuXByZOnDh4//33r/j888/TevXqVff2229/l5aW1uiEVFhY6B8wYEDDnZL999+/Gmygc8kll/R97733MgDOOeeczddff33hq6++mn7ttdf2C4fDjBkzpurJJ59clZycbAoKCkafeeaZm+fPn59x4YUXFh588MFVF110Uf/i4mJfUlJSZPbs2av22WefmCi+abtFkERaGqVTTiHrX/8m9PdX8E05y554U1ISXTKllFIx0oPpbUsJ3tFEtjW5ao3YC+NojVV9vQ2oamu31Zg0t83mprUUrLQ0T+xd/5NOsgFcNBtg795wxRU2mKupsfsUHVpT1nhNxGL7DcX23XHXYjQVtF1xRePsgLG1G9EL4c4K5p57rungbebMztlmazQXVP7zn033/3KPcw9R8ca3Zh1RkyfbpnWxcnJsbaq75tY9uGspWzPU1NjkJ80t18k1jdNendZvaeHSJi8kF29cnFoXqWv0w6wJ1XiueOuKgY//5/HceMuMyhtV9fiJj69pap29e/cOjxkzpvKll17KnDp16tYnnngi++c//3mJx+MhJSUl8vrrr3+XnZ0d2bBhg2/8+PHDpkyZstXTRE333XffnZecnBxZsWLF1wsWLEg++OCDR0Sn3Xvvvet69eoVDoVCHHTQQUMXLFiQfMMNNxQ+9NBDvd5///0Vffr0CbnX9eGHH6Y888wzPRctWvSNMYZx48YNP+KII8pzcnLCq1evTpo7d+4PBx100KrjjjtujyeffDLrkksuaRQkXnrppZuOO+64Ifvss0/lEUccUXrppZduycnJCd9zzz25q1atCn711Vdf+/1+Nm3a5K2qqpILL7xw0DvvvLN87733rj355JMH3nXXXbkzZswoBEhKSoosWrRoOcCBBx445JFHHlk1evTo2nfffTf14osv7v/pp5+uaOr4xto9giSvl7oDfkLJ/nuTOXcunHGmzeQzZEiiS6aUUiqG3+unsr6SjRUb6ZvRQla5riDa3GdXe8TEsGG2f01LYhMmNDU0NT0abEVrQdxDdNxJJ9lj+Mc/wsaNNmi77DI4+uhtgZP7orepi/jmNNVHp4kAqz4SIjT9XJLuuAdx9eEywSDVF5wDWzYSEB8+8Tbdl6i5fkaxZXbP01JSh4svtv21YoPKSy5pXa1Jc8erNUF5U8tfeincdlv8GsqRI+MHyPG22VQwHf3cGtGa34kT7W9qJ4sNkFoa31qnn3568XPPPZc1derUrS+//HL27NmzVwJEIhG58sor+3766adpHo+HwsLCwNq1a339+/cPxVvPRx99lHb5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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# 根据不同的训练集大小,和最大深度,生成学习曲线\n", "vs.ModelLearning(X_train, y_train)" @@ -355,7 +414,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题 4 - 回答:" + "### 问题 4 - 回答:\n", + "\n", + "选择:最大深度 max_depth = 3。\n", + "\n", + "随着训练数据量的增加,训练集曲线的评分逐渐下降,但是下降的趋势越来越平缓,最后像是趋近于一个值,不会低于这个数值。\n", + "\n", + "随着训练数据量的增加,验证曲线的评分越来越高,但是上升的趋势也是越来越平缓,最后不会高于一个数值。\n", + "\n", + "如果有更多的训练数据,不要不能有效提升模型的表现。因为从图上可以看到,数据量达到一定程度后,比如我选择的 max_depth = 3 这个图形,数据量在150以后,增加相同的数据量,训练曲线的下降十分平缓、验证集曲线上升得也十分平缓。所以,当数据量达到一定的程度,额外增加的数据量,不要不能想前期那样提高模型表现。" ] }, { @@ -370,11 +437,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# 根据不同的最大深度参数,生成复杂度曲线\n", "vs.ModelComplexity(X_train, y_train)" @@ -394,7 +470,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题 5 - 回答:" + "### 问题 5 - 回答:\n", + "\n", + "当模型以最大深度1训练时,模型的预测是出现很大的偏差。\n", + "\n", + "理由:当模型以最大深度1训练时,训练和预测的决定系数都很小(即训练误差和预测误差都很大),但是两者比较接近,说明模型复杂度不够,导致欠拟合,无法比较正确表示数据关系。\n", + "\n", + "当模型以最大深度10训练时,模型的预测是出现很大的方差。\n", + "\n", + "理由:当模型以最大深度10训练时,训练和预测的决定系数都得到了较大的提高(即训练误差和预测误差都相对较小),但是,两者的差值最大,且训练的决定系数相比预测决定系数大很多,说明模型存在这过拟合的情况,所以是出现很大方差的情况。" ] }, { @@ -409,7 +493,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题 6 - 回答:" + "### 问题 6 - 回答:\n", + "\n", + "根据问题5 中的图,我认为最大深度是4(或者3)的模型能够最好地对未见过的数据进行预测。\n", + "\n", + "依据:当最大深度是4(或者3)的时候,预测的决定系数最大,即预测的误差最小,这时候的偏差是最小的,过大或过小的最大深度数值对应的预测误差都增大;并且,这个时候训练和预测的决定系数差别保持一个相对较小的差别,说明方差是相对较小的。总之,最大深度为4时,偏差和方差都达到相对最低的情况,能够最好地预测未见过的数据。" ] }, { @@ -432,7 +520,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题 7 - 回答:" + "### 问题 7 - 回答:\n", + "\n", + "网格搜索法:选择需要调整的参数,对于每个参数确定需要测试的数值,计算机自动历遍所有组合,并且得到对应的参数。\n", + "\n", + "模型中对于最终预测结果有影响的不同的参数,设定一组大致最优的数值组,通过网格搜索法观察预测结果的最佳时的参数组合,这时候就一定程度上通过参数的设定来优化模型了。" ] }, { @@ -452,7 +544,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题 8 - 回答:" + "### 问题 8 - 回答:\n", + "\n", + "- K折交叉验证法:\n", + "\n", + " 1. 将给定的数据分为 K 份(一般 K = 10)\n", + " 2. 选取一份作为测试数据,其他的 K-1 份作为训练数据,然后按照给定的评估标准,得出模型分数。\n", + " 3. 对于每一份,进行 步骤2 的操作。\n", + " 4. 对于一个模型的参数组,得到 K 个测试结果。\n", + " 5. 对于 K 个结果取平均值作为这个参数组的最终模型得分\n", + " \n", + "- GridSearchCV 如何结合交叉验证\n", + "\n", + " 对于 GrideSearchCV 中的每个参数组合进行的测试,进行交叉验证得到模型的得分,次得分作为改组参数组合的最终得分。\n", + " \n", + "- cv_results 属性\n", + "\n", + " cv_results 属性告诉我们每种参数组的取值情况和最后算法得到的结果。" ] }, { @@ -475,29 +583,30 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, + "execution_count": 23, + "metadata": {}, "outputs": [], "source": [ "# TODO 4\n", "\n", "#提示: 导入 'KFold' 'DecisionTreeRegressor' 'make_scorer' 'GridSearchCV' \n", - "\n", + "from sklearn.model_selection import KFold\n", + "from sklearn.tree import DecisionTreeRegressor\n", + "from sklearn.metrics import make_scorer\n", + "from sklearn.model_selection import GridSearchCV\n", "\n", "def fit_model(X, y):\n", " \"\"\" 基于输入数据 [X,y],利于网格搜索找到最优的决策树模型\"\"\"\n", " \n", - " cross_validator = None\n", + " cross_validator = KFold(n_splits=10)\n", " \n", - " regressor = None\n", + " regressor = DecisionTreeRegressor()\n", "\n", - " params = None\n", + " params = {'max_depth':[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}\n", "\n", - " scoring_fnc = None\n", + " scoring_fnc = make_scorer(performance_metric)\n", "\n", - " grid = None\n", + " grid = GridSearchCV(regressor, params, scoring_fnc, cv=cross_validator )\n", "\n", " # 基于输入数据 [X,y],进行网格搜索\n", " grid = grid.fit(X, y)\n", @@ -562,12 +671,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": { - "collapsed": true, "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parameter 'max_depth' is 5 for the optimal model.\n" + ] + } + ], "source": [ "# 基于训练数据,获得最优模型\n", "optimal_reg = fit_model(X_train, y_train)\n", @@ -580,7 +696,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题 9 - 回答:" + "### 问题 9 - 回答:\n", + "\n", + "最优模型的最大深度(maximum depth)是5,和我在问题6所做的猜测不同。" ] }, { @@ -613,11 +731,19 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Predicted selling price for Client 1's home: $417,169.57\n", + "Predicted selling price for Client 2's home: $212,520.00\n", + "Predicted selling price for Client 3's home: $889,350.00\n" + ] + } + ], "source": [ "# 生成三个客户的数据\n", "client_data = [[5, 17, 15], # 客户 1\n", @@ -626,6 +752,7 @@ "\n", "# 进行预测\n", "predicted_price = optimal_reg.predict(client_data)\n", + "# print predicted_price\n", "for i, price in enumerate(predicted_price):\n", " print \"Predicted selling price for Client {}'s home: ${:,.2f}\".format(i+1, price)" ] @@ -634,7 +761,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题 10 - 回答:" + "### 问题 10 - 回答:\n", + "\n", + "建议每位客户的房屋销售的价格如上。这样的价格是合理的。\n", + "\n", + "因为所有的预测的价格介于获得的数据里面的最低价格 \\$105,000.00 与最高价格 \\$1,024,800.00 之间,且在平均价格 \\$454,342.94 ± 标准差 \\$165,171.13 附近,相对来说是合理的。" ] }, { @@ -647,19 +778,26 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Optimal model has R^2 score 0.80 on test data\n" + ] + } + ], "source": [ "#TODO 5\n", "\n", "# 提示:你可能需要用到 X_test, y_test, optimal_reg, performance_metric\n", "# 提示:你可能需要参考问题10的代码进行预测\n", "# 提示:你可能需要参考问题3的代码来计算R^2的值\n", + "test_predicted_price = optimal_reg.predict(X_test)\n", + "r2 = performance_metric(y_test, test_predicted_price)\n", "\n", - "r2 = 1\n", "\n", "print \"Optimal model has R^2 score {:,.2f} on test data\".format(r2)" ] @@ -677,7 +815,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题11 - 回答" + "### 问题11 - 回答\n", + "\n", + "最优模型在测试集上的决定系数为0.80,还是很高的,预测的结果比较接近真是的情况,这个模型基本达到要求。" ] }, { @@ -697,11 +837,28 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trial 1: $391,183.33\n", + "Trial 2: $411,417.39\n", + "Trial 3: $415,800.00\n", + "Trial 4: $420,622.22\n", + "Trial 5: $418,377.27\n", + "Trial 6: $411,931.58\n", + "Trial 7: $399,663.16\n", + "Trial 8: $407,232.00\n", + "Trial 9: $402,531.82\n", + "Trial 10: $413,700.00\n", + "\n", + "Range in prices: $29,438.89\n" + ] + } + ], "source": [ "# 请先注释掉 fit_model 函数里的所有 print 语句\n", "vs.PredictTrials(features, prices, fit_model, client_data)" @@ -711,7 +868,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题 12 - 回答:" + "### 问题 12 - 回答:\n", + "\n", + "对于一个特定的客户来说,随着训练数据的变化,预测的结果会不同,但是总体上来说,在一个相对较小的范围内波动变化。" ] }, { @@ -732,7 +891,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 问题 13 - 回答:" + "### 问题 13 - 回答:\n", + "\n", + "我认为在现实世界中无法使用:\n", + "\n", + "- 这个是上世纪七十年代的数据,无论是经济还是人口,都有巨大的变化,这个预测的模型对于现在的社会情况已经发生巨大的脱节了。\n", + "- 数据中呈现的特征并不足够以刻画一个房屋价格,其他的一些条件缺少对于预测有相当大的影响,比如房屋所处的地带(距离市中心的距离)、房屋的新旧程度、房屋所在的楼层、房屋的装修程度等等,这些都是比较重要的参考要素。\n", + "- 波士顿是大都市,人口密集,经济条件相对来说比较优越,其他乡镇地区,人口、经济、思想观念等等和波士顿地区有很大的差别,因此不具有推广性。\n", + "- 仅凭房屋所在的社会环境来判断房屋价值不合理,房屋的价格还严重受到房屋自身条件情况、时代的经济变化、当地人们对于购房的趋势等等因素的影响,房屋所处的社会环境只是一个影响方面。" ] }, { @@ -806,7 +972,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", - "version": "2.7.13" + "version": "2.7.14" } }, "nbformat": 4, diff --git a/litlle_test.ipynb b/litlle_test.ipynb new file mode 100644 index 0000000..20f2302 --- /dev/null +++ b/litlle_test.ipynb @@ -0,0 +1,137 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "a = [1, 2, 3, 4, 5, 6]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "33\n" + ] + } + ], + "source": [ + "print sum(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4.71428571429\n" + ] + } + ], + "source": [ + "print np.mean(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.5\n" + ] + } + ], + "source": [ + "print np.median(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.70782512766\n" + ] + } + ], + "source": [ + "print np.std(a)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "para = {1, 2}" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "set([1, 2])\n" + ] + } + ], + "source": [ + "print para" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/report.html b/report.html new file mode 100644 index 0000000..497e1eb --- /dev/null +++ b/report.html @@ -0,0 +1,12932 @@ + + + +boston_housing + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+
+

机器学习工程师纳米学位

模型评价与验证

项目 1: 预测波士顿房价

欢迎来到机器学习工程师纳米学位的第一个项目!在此文件中,有些示例代码已经提供给你,但你还需要实现更多的功能来让项目成功运行。除非有明确要求,你无须修改任何已给出的代码。以编程练习开始的标题表示接下来的内容中有需要你必须实现的功能。每一部分都会有详细的指导,需要实现的部分也会在注释中以TODO标出。请仔细阅读所有的提示!

+

除了实现代码外,你还必须回答一些与项目和实现有关的问题。每一个需要你回答的问题都会以'问题 X'为标题。请仔细阅读每个问题,并且在问题后的'回答'文字框中写出完整的答案。你的项目将会根据你对问题的回答和撰写代码所实现的功能来进行评分。

+

提示:Code 和 Markdown 区域可通过 Shift + Enter 快捷键运行。此外,Markdown可以通过双击进入编辑模式。

+
+ +
+
+
+
+
+
+
+
+

第一步. 导入数据

在这个项目中,你将利用马萨诸塞州波士顿郊区的房屋信息数据训练和测试一个模型,并对模型的性能和预测能力进行测试。通过该数据训练后的好的模型可以被用来对房屋做特定预测---尤其是对房屋的价值。对于房地产经纪等人的日常工作来说,这样的预测模型被证明非常有价值。

+

此项目的数据集来自UCI机器学习知识库(数据集已下线)。波士顿房屋这些数据于1978年开始统计,共506个数据点,涵盖了麻省波士顿不同郊区房屋14种特征的信息。本项目对原始数据集做了以下处理:

+
    +
  • 有16个'MEDV' 值为50.0的数据点被移除。 这很可能是由于这些数据点包含遗失看不到的值
  • +
  • 有1个数据点的 'RM' 值为8.78. 这是一个异常值,已经被移除。
  • +
  • 对于本项目,房屋的'RM''LSTAT''PTRATIO'以及'MEDV'特征是必要的,其余不相关特征已经被移除。
  • +
  • 'MEDV'特征的值已经过必要的数学转换,可以反映35年来市场的通货膨胀效应。
  • +
+

运行下面区域的代码以载入波士顿房屋数据集,以及一些此项目所需的Python库。如果成功返回数据集的大小,表示数据集已载入成功。

+ +
+
+
+
+
+
In [8]:
+
+
+
# 载入此项目所需要的库
+import numpy as np
+import pandas as pd
+import visuals as vs # Supplementary code
+
+# 检查你的Python版本
+from sys import version_info
+if version_info.major != 2 and version_info.minor != 7:
+    raise Exception('请使用Python 2.7来完成此项目')
+    
+# 让结果在notebook中显示
+%matplotlib inline
+
+ +
+
+
+ +
+
+
+
In [9]:
+
+
+
# 载入波士顿房屋的数据集
+data = pd.read_csv('housing.csv')
+prices = data['MEDV']
+features = data.drop('MEDV', axis = 1)
+    
+# 完成
+print "Boston housing dataset has {} data points with {} variables each.".format(*data.shape)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Boston housing dataset has 489 data points with 4 variables each.
+
+
+
+ +
+
+ +
+
+
+
+
+
+

第二步. 分析数据

在项目的第一个部分,你会对波士顿房地产数据进行初步的观察并给出你的分析。通过对数据的探索来熟悉数据可以让你更好地理解和解释你的结果。

+

由于这个项目的最终目标是建立一个预测房屋价值的模型,我们需要将数据集分为特征(features)目标变量(target variable)

+
    +
  • 特征 'RM''LSTAT',和 'PTRATIO',给我们提供了每个数据点的数量相关的信息。
  • +
  • 目标变量'MEDV',是我们希望预测的变量。
  • +
+

他们分别被存在featuresprices两个变量名中。

+ +
+
+
+
+
+
+
+

编程练习 1:基础统计运算

你的第一个编程练习是计算有关波士顿房价的描述统计数据。我们已为你导入了numpy,你需要使用这个库来执行必要的计算。这些统计数据对于分析模型的预测结果非常重要的。 +在下面的代码中,你要做的是:

+
    +
  • 计算prices中的'MEDV'的最小值、最大值、均值、中值和标准差;
  • +
  • 将运算结果储存在相应的变量中。
  • +
+ +
+
+
+
+
+
In [10]:
+
+
+
#TODO 1
+
+#目标:计算价值的最小值
+# minimum_price = None
+minimum_price = min(prices)
+
+
+#目标:计算价值的最大值
+# maximum_price = None
+maximum_price = max(prices)
+
+
+#目标:计算价值的平均值
+# mean_price = None
+mean_price = np.mean(prices)
+
+
+#目标:计算价值的中值
+# median_price = None
+median_price = np.median(prices)
+
+
+#目标:计算价值的标准差
+# std_price = None
+std_price = np.std(prices)
+
+
+#目标:输出计算的结果
+print "Statistics for Boston housing dataset:\n"
+print "Minimum price: ${:,.2f}".format(minimum_price)
+print "Maximum price: ${:,.2f}".format(maximum_price)
+print "Mean price: ${:,.2f}".format(mean_price)
+print "Median price ${:,.2f}".format(median_price)
+print "Standard deviation of prices: ${:,.2f}".format(std_price)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Statistics for Boston housing dataset:
+
+Minimum price: $105,000.00
+Maximum price: $1,024,800.00
+Mean price: $454,342.94
+Median price $438,900.00
+Standard deviation of prices: $165,171.13
+
+
+
+ +
+
+ +
+
+
+
+
+

问题 1 - 特征观察

如前文所述,本项目中我们关注的是其中三个值:'RM''LSTAT''PTRATIO',对每一个数据点:

+
    +
  • 'RM' 是该地区中每个房屋的平均房间数量;
  • +
  • 'LSTAT' 是指该地区有多少百分比的业主属于是低收入阶层(有工作但收入微薄);
  • +
  • 'PTRATIO' 是该地区的中学和小学里,学生和老师的数目比(学生/老师)。
  • +
+

凭直觉,上述三个特征中对每一个来说,你认为增大该特征的数值,'MEDV'的值会是增大还是减小呢?每一个答案都需要你给出理由。

+

提示:你预期一个'RM' 值是6的房屋跟'RM' 值是7的房屋相比,价值更高还是更低呢?

+ +
+
+
+
+
+
+
+

问题 1 - 回答:

    +
  • RM 增大,MEDV 会增大。

    +

    理由:平均房间数量增大,整体来说,房屋的平均面积会增大(房间的面积不会特别小,但可以比较大),而房屋的价格是和房屋的面积成正比例的关系。

    +
  • +
+
    +
  • LSTAT 增大,MEDV 会降低。

    +

    理由:如果该地区的业主属于是低收入阶层,工资是无法承担较高的房价的,说明这个地区的房价相对较低,可以被他们承受。但也不排除波士顿有没有分配住房的情况发生,如果有这样的情况,那么关系就不是特别大了。

    +
  • +
+
    +
  • PTRATTO 增大,MEDV 会减小。

    +

    理由:越是精英的阶层,家庭里面的孩子上学更偏重于精英学校,精英学校的管理偏向学生较少;反而普通学校里面,一个老师带的学生会更多。所以,PTRATTO 增大,说明这个地区普通家庭人口更多,所能承担的房价也会下降。

    +
  • +
+ +
+
+
+
+
+
+
+

编程练习 2: 数据分割与重排

接下来,你需要把波士顿房屋数据集分成训练和测试两个子集。通常在这个过程中,数据也会被重排列,以消除数据集中由于顺序而产生的偏差。 +在下面的代码中,你需要

+

使用 sklearn.model_selection 中的 train_test_split, 将featuresprices的数据都分成用于训练的数据子集和用于测试的数据子集。

+
    +
  • 分割比例为:80%的数据用于训练,20%用于测试;
  • +
  • 选定一个数值以设定 train_test_split 中的 random_state ,这会确保结果的一致性;
  • +
+ +
+
+
+
+
+
In [11]:
+
+
+
# TODO 2
+
+# 提示: 导入train_test_split
+from sklearn.cross_validation import train_test_split
+
+X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=30)
+
+ +
+
+
+ +
+
+
+
+
+

问题 2 - 训练及测试

将数据集按一定比例分为训练用的数据集和测试用的数据集对学习算法有什么好处?

+

如果用模型已经见过的数据,例如部分训练集数据进行测试,又有什么坏处?

+

提示: 如果没有数据来对模型进行测试,会出现什么问题?

+ +
+
+
+
+
+
+
+

问题 2 - 回答:

使用一定的数据进行训练,来外的一部分数据进行测试,可以保证得到的算法模型具有一定的泛化能力。

+

如果用模型已经见过的数据,则无法验证得到的模型是否具有推广性,极有可能出现 过拟合 的现象,这样,模型无法应用在其他没有见过的数据上,也就没有应用价值了。

+ +
+
+
+
+
+
+
+
+

第三步. 模型衡量标准

在项目的第三步中,你需要了解必要的工具和技巧来让你的模型进行预测。用这些工具和技巧对每一个模型的表现做精确的衡量可以极大地增强你预测的信心。

+ +
+
+
+
+
+
+
+

编程练习3:定义衡量标准

如果不能对模型的训练和测试的表现进行量化地评估,我们就很难衡量模型的好坏。通常我们会定义一些衡量标准,这些标准可以通过对某些误差或者拟合程度的计算来得到。在这个项目中,你将通过运算决定系数 R2 来量化模型的表现。模型的决定系数是回归分析中十分常用的统计信息,经常被当作衡量模型预测能力好坏的标准。

+

R2的数值范围从0至1,表示目标变量的预测值和实际值之间的相关程度平方的百分比。一个模型的R2 值为0还不如直接用平均值来预测效果好;而一个R2 值为1的模型则可以对目标变量进行完美的预测。从0至1之间的数值,则表示该模型中目标变量中有百分之多少能够用特征来解释。模型也可能出现负值的R2,这种情况下模型所做预测有时会比直接计算目标变量的平均值差很多。

+

在下方代码的 performance_metric 函数中,你要实现:

+
    +
  • 使用 sklearn.metrics 中的 r2_score 来计算 y_truey_predict的R2值,作为对其表现的评判。
  • +
  • 将他们的表现评分储存到score变量中。
  • +
+

+
    +
  • (可选) 不使用任何外部库,参考决定系数的定义进行计算,这也可以帮助你更好的理解决定系数在什么情况下等于0或等于1。
  • +
+ +
+
+
+
+
+
In [12]:
+
+
+
# TODO 3
+
+# 提示: 导入r2_score
+
+def performance_metric(y_true, y_predict):
+    """计算并返回预测值相比于预测值的分数"""
+    from sklearn.metrics import r2_score
+    
+    score = r2_score(y_true, y_predict)
+
+    return score
+
+ +
+
+
+ +
+
+
+
In [ ]:
+
+
+
# TODO 3 可选
+
+# 不允许导入任何计算决定系数的库
+
+def performance_metric2(y_true, y_predict):
+    """计算并返回预测值相比于预测值的分数"""
+    
+    score = None
+
+    return score
+
+ +
+
+
+ +
+
+
+
+
+

问题 3 - 拟合程度

假设一个数据集有五个数据且一个模型做出下列目标变量的预测:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
真实数值预测数值
3.02.5
-0.50.0
2.02.1
7.07.8
4.25.3
+

你觉得这个模型已成功地描述了目标变量的变化吗?如果成功,请解释为什么,如果没有,也请给出原因。

+

提示:运行下方的代码,使用performance_metric函数来计算模型的决定系数。

+ +
+
+
+
+
+
In [13]:
+
+
+
# 计算这个模型的预测结果的决定系数
+score = performance_metric([3, -0.5, 2, 7, 4.2], [2.5, 0.0, 2.1, 7.8, 5.3])
+print "Model has a coefficient of determination, R^2, of {:.3f}.".format(score)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Model has a coefficient of determination, R^2, of 0.923.
+
+
+
+ +
+
+ +
+
+
+
+
+

问题 3 - 回答:

我觉得这个模型已经相当成功地莫属了目标变量的变化,因为预测的结果的决定系数 R2 为0.923,相当接近1(决定系数越接近1,说明模型越完美)

+ +
+
+
+
+
+
+
+
+

第四步. 分析模型的表现

在项目的第四步,我们来看一下不同参数下,模型在训练集和验证集上的表现。这里,我们专注于一个特定的算法(带剪枝的决策树,但这并不是这个项目的重点),和这个算法的一个参数 'max_depth'。用全部训练集训练,选择不同'max_depth' 参数,观察这一参数的变化如何影响模型的表现。画出模型的表现来对于分析过程十分有益,这可以让我们看到一些单看结果看不到的行为。

+ +
+
+
+
+
+
+
+

学习曲线

下方区域内的代码会输出四幅图像,它们是一个决策树模型在不同最大深度下的表现。每一条曲线都直观得显示了随着训练数据量的增加,模型学习曲线的在训练集评分和验证集评分的变化,评分使用决定系数R2。曲线的阴影区域代表的是该曲线的不确定性(用标准差衡量)。

+

运行下方区域中的代码,并利用输出的图形回答下面的问题。

+ +
+
+
+
+
+
In [14]:
+
+
+
# 根据不同的训练集大小,和最大深度,生成学习曲线
+vs.ModelLearning(X_train, y_train)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

问题 4 - 学习曲线

选择上述图像中的其中一个,并给出其最大深度。随着训练数据量的增加,训练集曲线的评分有怎样的变化?验证集曲线呢?如果有更多的训练数据,是否能有效提升模型的表现呢?

+

提示:学习曲线的评分是否最终会收敛到特定的值?

+ +
+
+
+
+
+
+
+

问题 4 - 回答:

选择:最大深度 max_depth = 3。

+

随着训练数据量的增加,训练集曲线的评分逐渐下降,但是下降的趋势越来越平缓,最后像是趋近于一个值,不会低于这个数值。

+

随着训练数据量的增加,验证曲线的评分越来越高,但是上升的趋势也是越来越平缓,最后不会高于一个数值。

+

如果有更多的训练数据,不要不能有效提升模型的表现。因为从图上可以看到,数据量达到一定程度后,比如我选择的 max_depth = 3 这个图形,数据量在150以后,增加相同的数据量,训练曲线的下降十分平缓、验证集曲线上升得也十分平缓。所以,当数据量达到一定的程度,额外增加的数据量,不要不能想前期那样提高模型表现。

+ +
+
+
+
+
+
+
+

复杂度曲线

下列代码内的区域会输出一幅图像,它展示了一个已经经过训练和验证的决策树模型在不同最大深度条件下的表现。这个图形将包含两条曲线,一个是训练集的变化,一个是验证集的变化。跟学习曲线相似,阴影区域代表该曲线的不确定性,模型训练和测试部分的评分都用的 performance_metric 函数。

+

运行下方区域中的代码,并利用输出的图形并回答下面的两个问题。

+ +
+
+
+
+
+
In [15]:
+
+
+
# 根据不同的最大深度参数,生成复杂度曲线
+vs.ModelComplexity(X_train, y_train)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+

问题 5 - 偏差(bias)与方差(variance)之间的权衡取舍

当模型以最大深度 1训练时,模型的预测是出现很大的偏差还是出现了很大的方差?当模型以最大深度10训练时,情形又如何呢?图形中的哪些特征能够支持你的结论?

+

提示: 你如何得知模型是否出现了偏差很大或者方差很大的问题?

+ +
+
+
+
+
+
+
+

问题 5 - 回答:

当模型以最大深度1训练时,模型的预测是出现很大的偏差。

+

理由:当模型以最大深度1训练时,训练和预测的决定系数都很小(即训练误差和预测误差都很大),但是两者比较接近,说明模型复杂度不够,导致欠拟合,无法比较正确表示数据关系。

+

当模型以最大深度10训练时,模型的预测是出现很大的方差。

+

理由:当模型以最大深度10训练时,训练和预测的决定系数都得到了较大的提高(即训练误差和预测误差都相对较小),但是,两者的差值最大,且训练的决定系数相比预测决定系数大很多,说明模型存在这过拟合的情况,所以是出现很大方差的情况。

+ +
+
+
+
+
+
+
+

问题 6- 最优模型的猜测

结合问题 5 中的图,你认为最大深度是多少的模型能够最好地对未见过的数据进行预测?你得出这个答案的依据是什么?

+ +
+
+
+
+
+
+
+

问题 6 - 回答:

根据问题5 中的图,我认为最大深度是4(或者3)的模型能够最好地对未见过的数据进行预测。

+

依据:当最大深度是4(或者3)的时候,预测的决定系数最大,即预测的误差最小,这时候的偏差是最小的,过大或过小的最大深度数值对应的预测误差都增大;并且,这个时候训练和预测的决定系数差别保持一个相对较小的差别,说明方差是相对较小的。总之,最大深度为4时,偏差和方差都达到相对最低的情况,能够最好地预测未见过的数据。

+ +
+
+
+
+
+
+
+
+

第五步. 选择最优参数

+
+
+
+
+
+
+
+

问题 7- 网格搜索(Grid Search)

什么是网格搜索法?如何用它来优化模型?

+ +
+
+
+
+
+
+
+

问题 7 - 回答:

网格搜索法:选择需要调整的参数,对于每个参数确定需要测试的数值,计算机自动历遍所有组合,并且得到对应的参数。

+

模型中对于最终预测结果有影响的不同的参数,设定一组大致最优的数值组,通过网格搜索法观察预测结果的最佳时的参数组合,这时候就一定程度上通过参数的设定来优化模型了。

+ +
+
+
+
+
+
+
+

问题 8 - 交叉验证

    +
  • 什么是K折交叉验证法(k-fold cross-validation)?
  • +
  • GridSearchCV是如何结合交叉验证来完成对最佳参数组合的选择的?
  • +
  • GridSearchCV中的'cv_results_'属性能告诉我们什么?
  • +
  • 网格搜索时如果不使用交叉验证会有什么问题?交叉验证又是如何解决这个问题的?
  • +
+

提示: 在下面 fit_model函数最后加入 print pd.DataFrame(grid.cv_results_) 可以帮你查看更多信息。

+ +
+
+
+
+
+
+
+

问题 8 - 回答:

    +
  • K折交叉验证法:

    +
      +
    1. 将给定的数据分为 K 份(一般 K = 10)
    2. +
    3. 选取一份作为测试数据,其他的 K-1 份作为训练数据,然后按照给定的评估标准,得出模型分数。
    4. +
    5. 对于每一份,进行 步骤2 的操作。
    6. +
    7. 对于一个模型的参数组,得到 K 个测试结果。
    8. +
    9. 对于 K 个结果取平均值作为这个参数组的最终模型得分
    10. +
    +
  • +
  • GridSearchCV 如何结合交叉验证

    +

    对于 GrideSearchCV 中的每个参数组合进行的测试,进行交叉验证得到模型的得分,次得分作为改组参数组合的最终得分。

    +
  • +
  • cv_results 属性

    +

    cv_results 属性告诉我们每种参数组的取值情况和最后算法得到的结果。

    +
  • +
+ +
+
+
+
+
+
+
+

编程练习 4:训练最优模型

在这个练习中,你将需要将所学到的内容整合,使用决策树算法训练一个模型。为了得出的是一个最优模型,你需要使用网格搜索法训练模型,以找到最佳的 'max_depth' 参数。你可以把'max_depth' 参数理解为决策树算法在做出预测前,允许其对数据提出问题的数量。决策树是监督学习算法中的一种。

+

在下方 fit_model 函数中,你需要做的是:

+
    +
  1. 定义 'cross_validator' 变量: 使用 sklearn.model_selection 中的 KFold 创建一个交叉验证生成器对象;
  2. +
  3. 定义 'regressor' 变量: 使用 sklearn.tree 中的 DecisionTreeRegressor 创建一个决策树的回归函数;
  4. +
  5. 定义 'params' 变量: 为 'max_depth' 参数创造一个字典,它的值是从1至10的数组;
  6. +
  7. 定义 'scoring_fnc' 变量: 使用 sklearn.metrics 中的 make_scorer 创建一个评分函数; +将 ‘performance_metric’ 作为参数传至这个函数中;
  8. +
  9. 定义 'grid' 变量: 使用 sklearn.model_selection 中的 GridSearchCV 创建一个网格搜索对象;将变量'regressor', 'params', 'scoring_fnc''cross_validator' 作为参数传至这个对象构造函数中;
  10. +
+

如果你对python函数的默认参数定义和传递不熟悉,可以参考这个MIT课程的视频

+ +
+
+
+
+
+
In [23]:
+
+
+
# TODO 4
+
+#提示: 导入 'KFold' 'DecisionTreeRegressor' 'make_scorer' 'GridSearchCV' 
+from sklearn.model_selection import KFold
+from sklearn.tree import DecisionTreeRegressor
+from sklearn.metrics import make_scorer
+from sklearn.model_selection import GridSearchCV
+
+def fit_model(X, y):
+    """ 基于输入数据 [X,y],利于网格搜索找到最优的决策树模型"""
+    
+    cross_validator = KFold(n_splits=10)
+    
+    regressor = DecisionTreeRegressor()
+
+    params = {'max_depth':[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
+
+    scoring_fnc = make_scorer(performance_metric)
+
+    grid = GridSearchCV(regressor, params, scoring_fnc, cv=cross_validator )
+
+    # 基于输入数据 [X,y],进行网格搜索
+    grid = grid.fit(X, y)
+
+    # 返回网格搜索后的最优模型
+    return grid.best_estimator_
+
+ +
+
+
+ +
+
+
+
+
+

编程练习 4:训练最优模型 (可选)

在这个练习中,你将需要将所学到的内容整合,使用决策树算法训练一个模型。为了得出的是一个最优模型,你需要使用网格搜索法训练模型,以找到最佳的 'max_depth' 参数。你可以把'max_depth' 参数理解为决策树算法在做出预测前,允许其对数据提出问题的数量。决策树是监督学习算法中的一种。

+

在下方 fit_model 函数中,你需要做的是:

+
    +
  • 遍历参数‘max_depth’的可选值 1~10,构造对应模型
  • +
  • 计算当前模型的交叉验证分数
  • +
  • 返回最优交叉验证分数对应的模型
  • +
+ +
+
+
+
+
+
In [ ]:
+
+
+
# TODO 4 可选
+
+'''
+不允许使用 DecisionTreeRegressor 以外的任何 sklearn 库
+
+提示: 你可能需要实现下面的 cross_val_score 函数
+
+def cross_val_score(estimator, X, y, scoring = performance_metric, cv=3):
+    """ 返回每组交叉验证的模型分数的数组 """
+    scores = [0,0,0]
+    return scores
+'''
+
+def fit_model2(X, y):
+    """ 基于输入数据 [X,y],利于网格搜索找到最优的决策树模型"""
+    
+    #最优交叉验证分数对应的最优模型
+    best_estimator = None
+    
+    return best_estimator
+
+ +
+
+
+ +
+
+
+
+
+

问题 9 - 最优模型

最优模型的最大深度(maximum depth)是多少?此答案与你在问题 6所做的猜测是否相同?

+

运行下方区域内的代码,将决策树回归函数代入训练数据的集合,以得到最优化的模型。

+ +
+
+
+
+
+
In [24]:
+
+
+
# 基于训练数据,获得最优模型
+optimal_reg = fit_model(X_train, y_train)
+
+# 输出最优模型的 'max_depth' 参数
+print "Parameter 'max_depth' is {} for the optimal model.".format(optimal_reg.get_params()['max_depth'])
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Parameter 'max_depth' is 5 for the optimal model.
+
+
+
+ +
+
+ +
+
+
+
+
+

问题 9 - 回答:

最优模型的最大深度(maximum depth)是5,和我在问题6所做的猜测不同。

+ +
+
+
+
+
+
+
+

第六步. 做出预测

当我们用数据训练出一个模型,它现在就可用于对新的数据进行预测。在决策树回归函数中,模型已经学会对新输入的数据提问,并返回对目标变量的预测值。你可以用这个预测来获取数据未知目标变量的信息,这些数据必须是不包含在训练数据之内的。

+ +
+
+
+
+
+
+
+

问题 10 - 预测销售价格

想像你是一个在波士顿地区的房屋经纪人,并期待使用此模型以帮助你的客户评估他们想出售的房屋。你已经从你的三个客户收集到以下的资讯:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
特征客戶 1客戶 2客戶 3
房屋内房间总数5 间房间4 间房间8 间房间
社区贫困指数(%被认为是贫困阶层)17%32%3%
邻近学校的学生-老师比例15:122:112:1
+

你会建议每位客户的房屋销售的价格为多少?从房屋特征的数值判断,这样的价格合理吗?为什么?

+

提示:用你在分析数据部分计算出来的统计信息来帮助你证明你的答案。

+

运行下列的代码区域,使用你优化的模型来为每位客户的房屋价值做出预测。

+ +
+
+
+
+
+
In [26]:
+
+
+
# 生成三个客户的数据
+client_data = [[5, 17, 15], # 客户 1
+               [4, 32, 22], # 客户 2
+               [8, 3, 12]]  # 客户 3
+
+# 进行预测
+predicted_price = optimal_reg.predict(client_data)
+# print predicted_price
+for i, price in enumerate(predicted_price):
+    print "Predicted selling price for Client {}'s home: ${:,.2f}".format(i+1, price)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Predicted selling price for Client 1's home: $417,169.57
+Predicted selling price for Client 2's home: $212,520.00
+Predicted selling price for Client 3's home: $889,350.00
+
+
+
+ +
+
+ +
+
+
+
+
+

问题 10 - 回答:

建议每位客户的房屋销售的价格如上。这样的价格是合理的。

+

因为所有的预测的价格介于获得的数据里面的最低价格 \$105,000.00 与最高价格 \$1,024,800.00 之间,且在平均价格 \$454,342.94 ± 标准差 \$165,171.13 附近,相对来说是合理的。

+ +
+
+
+
+
+
+
+

编程练习 5

你刚刚预测了三个客户的房子的售价。在这个练习中,你将用你的最优模型在整个测试数据上进行预测, 并计算相对于目标变量的决定系数 R2的值**。

+ +
+
+
+
+
+
In [28]:
+
+
+
#TODO 5
+
+# 提示:你可能需要用到 X_test, y_test, optimal_reg, performance_metric
+# 提示:你可能需要参考问题10的代码进行预测
+# 提示:你可能需要参考问题3的代码来计算R^2的值
+test_predicted_price = optimal_reg.predict(X_test)
+r2 = performance_metric(y_test, test_predicted_price)
+
+
+print "Optimal model has R^2 score {:,.2f} on test data".format(r2)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Optimal model has R^2 score 0.80 on test data
+
+
+
+ +
+
+ +
+
+
+
+
+

问题11 - 分析决定系数

你刚刚计算了最优模型在测试集上的决定系数,你会如何评价这个结果?

+ +
+
+
+
+
+
+
+

问题11 - 回答

最优模型在测试集上的决定系数为0.80,还是很高的,预测的结果比较接近真是的情况,这个模型基本达到要求。

+ +
+
+
+
+
+
+
+

模型健壮性

一个最优的模型不一定是一个健壮模型。有的时候模型会过于复杂或者过于简单,以致于难以泛化新增添的数据;有的时候模型采用的学习算法并不适用于特定的数据结构;有的时候样本本身可能有太多噪点或样本过少,使得模型无法准确地预测目标变量。这些情况下我们会说模型是欠拟合的。

+

问题 12 - 模型健壮性

模型是否足够健壮来保证预测的一致性?

+

提示: 执行下方区域中的代码,采用不同的训练和测试集执行 fit_model 函数10次。注意观察对一个特定的客户来说,预测是如何随训练数据的变化而变化的。

+ +
+
+
+
+
+
In [29]:
+
+
+
# 请先注释掉 fit_model 函数里的所有 print 语句
+vs.PredictTrials(features, prices, fit_model, client_data)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Trial 1: $391,183.33
+Trial 2: $411,417.39
+Trial 3: $415,800.00
+Trial 4: $420,622.22
+Trial 5: $418,377.27
+Trial 6: $411,931.58
+Trial 7: $399,663.16
+Trial 8: $407,232.00
+Trial 9: $402,531.82
+Trial 10: $413,700.00
+
+Range in prices: $29,438.89
+
+
+
+ +
+
+ +
+
+
+
+
+

问题 12 - 回答:

对于一个特定的客户来说,随着训练数据的变化,预测的结果会不同,但是总体上来说,在一个相对较小的范围内波动变化。

+ +
+
+
+
+
+
+
+

问题 13 - 实用性探讨

简单地讨论一下你建构的模型能否在现实世界中使用?

+

提示:回答以下几个问题,并给出相应结论的理由:

+
    +
  • 1978年所采集的数据,在已考虑通货膨胀的前提下,在今天是否仍然适用?
  • +
  • 数据中呈现的特征是否足够描述一个房屋?
  • +
  • 在波士顿这样的大都市采集的数据,能否应用在其它乡镇地区?
  • +
  • 你觉得仅仅凭房屋所在社区的环境来判断房屋价值合理吗?
  • +
+ +
+
+
+
+
+
+
+

问题 13 - 回答:

我认为在现实世界中无法使用:

+
    +
  • 这个是上世纪七十年代的数据,无论是经济还是人口,都有巨大的变化,这个预测的模型对于现在的社会情况已经发生巨大的脱节了。
  • +
  • 数据中呈现的特征并不足够以刻画一个房屋价格,其他的一些条件缺少对于预测有相当大的影响,比如房屋所处的地带(距离市中心的距离)、房屋的新旧程度、房屋所在的楼层、房屋的装修程度等等,这些都是比较重要的参考要素。
  • +
  • 波士顿是大都市,人口密集,经济条件相对来说比较优越,其他乡镇地区,人口、经济、思想观念等等和波士顿地区有很大的差别,因此不具有推广性。
  • +
  • 仅凭房屋所在的社会环境来判断房屋价值不合理,房屋的价格还严重受到房屋自身条件情况、时代的经济变化、当地人们对于购房的趋势等等因素的影响,房屋所处的社会环境只是一个影响方面。
  • +
+ +
+
+
+
+
+
+
+

可选问题 - 预测北京房价

(本题结果不影响项目是否通过)通过上面的实践,相信你对机器学习的一些常用概念有了很好的领悟和掌握。但利用70年代的波士顿房价数据进行建模的确对我们来说意义不是太大。现在你可以把你上面所学应用到北京房价数据集中 bj_housing.csv

+

免责声明:考虑到北京房价受到宏观经济、政策调整等众多因素的直接影响,预测结果仅供参考。

+

这个数据集的特征有:

+
    +
  • Area:房屋面积,平方米
  • +
  • Room:房间数,间
  • +
  • Living: 厅数,间
  • +
  • School: 是否为学区房,0或1
  • +
  • Year: 房屋建造时间,年
  • +
  • Floor: 房屋所处楼层,层
  • +
+

目标变量:

+
    +
  • Value: 房屋人民币售价,万
  • +
+

你可以参考上面学到的内容,拿这个数据集来练习数据分割与重排、定义衡量标准、训练模型、评价模型表现、使用网格搜索配合交叉验证对参数进行调优并选出最佳参数,比较两者的差别,最终得出最佳模型对验证集的预测分数。

+ +
+
+
+
+
+
In [ ]:
+
+
+
# TODO 6
+
+# 你的代码
+
+ +
+
+
+ +
+
+
+
+
+

问题14 - 北京房价预测

你成功的用新的数据集构建了模型了吗?他能对测试数据进行验证吗?它的表现是否符合你的预期?交叉验证是否有助于提升你模型的表现?

+

提示:如果你是从零开始构建机器学习的代码会让你一时觉得无从下手。这时不要着急,你要做的只是查看之前写的代码,把每一行都看明白,然后逐步构建你的模型。当中遇到什么问题也可以在我们论坛寻找答案。也许你会发现你所构建的模型的表现并没有达到你的预期,这说明机器学习并非是一项简单的任务,构建一个表现良好的模型需要长时间的研究和测试。这也是我们接下来的课程中会逐渐学到的。

+ +
+
+
+
+
+
+
+

问题14 - 回答

+
+
+
+
+
+ + + + + +