├── .gitignore ├── .nojekyll ├── 404.html ├── CNAME ├── CONTRIBUTING.md ├── Dockerfile ├── README.md ├── SUMMARY.md ├── asset ├── docsify-apachecn-footer.js ├── docsify-baidu-push.js ├── docsify-baidu-stat.js ├── docsify-clicker.js ├── docsify-cnzz.js ├── docsify-copy-code.min.js ├── docsify.min.js ├── prism-darcula.css ├── prism-python.min.js ├── search.min.js ├── style.css └── vue.css ├── docs ├── 1.md ├── 10.1.md ├── 10.2.md ├── 10.3.md ├── 10.md ├── 11.1.md ├── 11.2.md ├── 11.3.md ├── 11.4.md ├── 11.md ├── 12.1.md ├── 12.2.md ├── 12.3.md ├── 12.md ├── 13.1.md ├── 13.2.md ├── 13.3.md ├── 13.4.md ├── 13.5.md ├── 13.md ├── 14.1.md ├── 14.2.md ├── 14.md ├── 15.1.md ├── 15.2.md ├── 15.3.md ├── 15.md ├── 16.1.md ├── 16.2.md ├── 16.3.md ├── 16.md ├── 17.1.md ├── 17.2.md ├── 17.3.md ├── 17.4.md ├── 17.5.md ├── 17.6.md ├── 17.7.md ├── 17.8.md ├── 17.md ├── 18.1.md ├── 18.2.md ├── 18.3.md ├── 18.4.md ├── 18.5.md ├── 18.md ├── 19.md ├── 2.md ├── 20.1.md ├── 20.2.md ├── 20.3.md ├── 20.4.md ├── 20.md ├── 3.md ├── 4.md ├── 5.md ├── 6.md ├── 7.1.md ├── 7.md ├── 8.1.md ├── 8.2.md ├── 8.3.md ├── 8.md ├── 9.1.md ├── 9.2.md ├── 9.3.md ├── 9.md └── img │ ├── 012e643b0a14c04165145874e8d2d6cd.jpg │ ├── 02a0ecd58c4410b6e73184acc9ace95a.jpg │ ├── 0396507ddaf1d70ceb3fcfe12eeac42c.jpg │ ├── 05fbbe5293d201e889083cf2ed0019f8.jpg │ ├── 0783fba8899f40de628b34f93129359c.jpg │ ├── 0a2d571dbabc5c2d04f2841add0602d5.jpg │ ├── 0ce3e484b2dc0eef8d92bf1f4fc4be3d.jpg │ ├── 1-1.png │ ├── 1-2.png │ ├── 1-3.png │ ├── 1-4.png │ ├── 119e829a3cfa7ada54a9c69482cc0d1d.jpg │ ├── 141ff04bbd787a6e5c678987efbbc3c9.jpg │ ├── 162826f0fe770b3a65a5ff4fbe720bfa.jpg │ ├── 182f6f318b418119e2dca747b379a9ca.jpg │ ├── 1981680eb840352e8c8cd53ba6edf6dc.jpg │ ├── 19b6f7050bb66736a7fb5e0f9035e5b6.jpg │ ├── 1ab785cde23f64a60b44c020541edac1.jpg │ ├── 1bdcfaac38525b33a3de831a659fe822.jpg │ ├── 1c244258ff328b51a885453d3f0de801.jpg │ ├── 1c986b4165be183e66852e3a412016a4.jpg │ ├── 1d9cc73484fafe3fdd5868d3949ddfd4.jpg │ ├── 1e2691240fb999398e82a3cee07625c9.jpg │ ├── 1e2bbbbbdf2aa3eb3b3f913fc49e4a6f.jpg │ ├── 1e8bd1ef3091864b80be6040a03ca02b.jpg │ ├── 2-1.jpg │ ├── 2-2.png │ ├── 2-3.png │ ├── 219120ca2794919935fe64d208dce73b.jpg │ ├── 22d09c2a3672ad86ceaf928c368c5c8e.jpg │ ├── 24e1f51105d3dfc35124d25d9b3b6348.jpg │ ├── 2616ce35cb39df1e77481c08cf41bdba.jpg │ ├── 294616ae10dc3e6b98b6dd1f2faeafc7.jpg │ ├── 2a4a832c349eb9fceb68880db3620e8b.jpg │ ├── 2a612119ee6d04f202b8e8cdaf101019.jpg │ ├── 2a8aa0f7ee461e907d388c236969f203.jpg │ ├── 2e3c0d8a3206714d7be34978f181b50d.jpg │ ├── 2e7620847d331c0912cf9dbc85774b88.jpg │ ├── 3-1.png │ ├── 3-2.png │ ├── 3-3.png │ ├── 31eb8fd37277e9c61a92a5185e977206.jpg │ ├── 36725c695b1ecae996ff2107282cd111.jpg │ ├── 3761246072134f50d3d1c36bcc3489a7.jpg │ ├── 37db3b06886ed2768df2d30778c78815.jpg │ ├── 3aa561a6bea80f25fc29d9cf0fda2294.jpg │ ├── 3b5242f89b11fc74af01dcfb801a0709.jpg │ ├── 3cbc7f203a5ce676e3242ecf64460fed.jpg │ ├── 3fc7b32eb5869167179da3af2be3df36.jpg │ ├── 401ed50e4b3669b9bbfd290e7ebbf77f.jpg │ ├── 410212c35338c68b54571b0e714c2258.jpg │ ├── 428c978ea70f50db7b8098daa01575bc.jpg │ ├── 475a8487849ba15ab087ef180770c61d.jpg │ ├── 481382f507633c1cd9bf4869bb46a70d.jpg │ ├── 48e76023438cc6c14af4dbd3b6c7242f.jpg │ ├── 4ad791d1b9b247b0850a079da7710c49.jpg │ ├── 4af6e2d380aa3ad9f9a0b1bba7042b5a.jpg │ ├── 4cf4e0313f8a9e9d323fdf241c00c692.jpg │ ├── 4e43bd60805eff5fc4f7ad0163dc79cd.jpg │ ├── 4e86a8913f5b492400d112089d258b82.jpg │ ├── 5-1.png │ ├── 5-2.jpg │ ├── 5-3.jpg │ ├── 5-4.png │ ├── 50d6afa4cc4ba105377e7840b31227b5.jpg │ ├── 5151d819eb3e8a310944e9d300e7a1e2.jpg │ ├── 54638c6f90b0c3735c8bb0ef144c18ef.jpg │ ├── 547dc6d4cf4b7c3b496c1b5aa8aca5e1.jpg │ ├── 56685a50eaca04dd545f41fc548c9055.jpg │ ├── 581f27118a748732911374cb6ffc047b.jpg │ ├── 58840a03de9e398a7741a74a794db9bd.jpg │ ├── 5896b01ac384692bf9e5e60bb019fe40.jpg │ ├── 598f5ee47260ec9135365901a144b946.jpg │ ├── 59a54919f490228adab41a1439b6c86c.jpg │ ├── 5e2286aab642a388a99a5ddf6f8f3fa4.jpg │ ├── 5f24ad39e6714fd81ea9106bcd0d1abc.jpg │ ├── 5f61f6ada8e62895878e098dfa140c26.jpg │ ├── 6-1.png │ ├── 6-10.png │ ├── 6-11.png │ ├── 6-12.png │ ├── 6-13.png │ ├── 6-14.png │ ├── 6-15.png │ ├── 6-16.png │ ├── 6-17.png │ ├── 6-18.png │ ├── 6-19.png │ ├── 6-2.png │ ├── 6-20.png │ ├── 6-21.png │ ├── 6-22.png │ ├── 6-23.png │ ├── 6-24.png │ ├── 6-25.png │ ├── 6-26.png │ ├── 6-27.png │ ├── 6-28.png │ ├── 6-29.png │ ├── 6-3.png │ ├── 6-30.png │ ├── 6-31.png │ ├── 6-32.png │ ├── 6-33.png │ ├── 6-34.png │ ├── 6-35.png │ ├── 6-36.png │ ├── 6-37.png │ ├── 6-4.png │ ├── 6-5.png │ ├── 6-6.png │ ├── 6-7.png │ ├── 6-8.png │ ├── 6-9.png │ ├── 621eb5b2615ecc9898550422664219f6.jpg │ ├── 628c62f5df1179ba1429e5fd9affb692.jpg │ ├── 62db30e6efedf81de7301650e413f9ad.jpg │ ├── 6503fba9094def20f7c2dbf2cee1f45c.jpg │ ├── 674cdf6c03134b3ab23ac48d009c2c5d.jpg │ ├── 68ca55dbe244757308359be97453de71.jpg │ ├── 6bf727fd86485dbbac83baabc11501fe.jpg │ ├── 6c007733cbb18e2dd4c4783cbd213a0b.jpg │ ├── 7203035bf18ecd403a241059ae979857.jpg │ ├── 7221e81b49ef94eaaca9721cff85eab7.jpg │ ├── 722776e1934b6d14f68a80cba34a7d66.jpg │ ├── 7354718ee4fcb2ecae5723a05e7cd985.jpg │ ├── 7383719a4801ef36b5fa81b4aca74c83.jpg │ ├── 740960f82b9ad13ad1bfdad9b2653e8d.jpg │ ├── 741ad656bc29942856373263ec2eff86.jpg │ ├── 74f8b6ee68591e99df8825ce39d9fb43.jpg │ ├── 7688c95aa3b2eda78f134dbab8269ce5.jpg │ ├── 769a95ba9ac96807a07d24af785428d2.jpg │ ├── 76a75a902976a282f37b429aac11aeac.jpg │ ├── 7aaea1b7b6832e80b3c50c34c14ad2a4.jpg │ ├── 7ac51b31279f72f207834354d12fe264.jpg │ ├── 7b8737e3e617a04b4e88a3fadaf84497.jpg │ ├── 7caefdaf19673946794a05e6e9b8cd30.jpg │ ├── 7cff540f9cbbd2c3a7a344194849c200.jpg │ ├── 7df0f3db2886184c1a9ba002f2ee393b.jpg │ ├── 7e4290636eac64cb2717852692dc891a.jpg │ ├── 831ee85b962ad0678a02c0098bf76e5f.jpg │ ├── 83e40b8cce650105e5e9325182567f61.jpg │ ├── 8459c61db41c38138346bc70f0bf1955.jpg │ ├── 85ffad94c131d99d3caf4889b9ad62fb.jpg │ ├── 876280d2110b8a794f140e24467f616b.jpg │ ├── 87943c95825a864c0b672b31764c4515.jpg │ ├── 8839f2182bcbe3d327adc8d24f8e2323.jpg │ ├── 88d60969e5869eb93f55cc9886c73bcb.jpg │ ├── 89036c56c487a2bf6cd7c09a81073ff5.jpg │ ├── 897078873a9ca0b6c3f594f9a39f0a8c.jpg │ ├── 8a24c53d6add631048ea934239225e8d.jpg │ ├── 8d3e4011c287f193803ac40550ad6d5d.jpg │ ├── 8d46f5640197aa56f280f35358781d71.jpg │ ├── 906247f1e253e818d146d190f069f6d4.jpg │ ├── 907214087b3997cb4b3f1090ab6df057.jpg │ ├── 913dc9f2031d54d789f5ffb9cca34e7a.jpg │ ├── 9358643a881b6a7c22a36b0fee81025c.jpg │ ├── 93a3167cc667605fe7f42ccc8c2a757b.jpg │ ├── 96b0e2357cf83ad7761be54e2fae900a.jpg │ ├── 96d2456e7d205f246a828e103b63dadf.jpg │ ├── 972d0f384ba5cd9ccf73a1279401a7a5.jpg │ ├── 9c3de0c36e094e2028854ff2095a2fa2.jpg │ ├── 9e28d690952a2e1ac45ed4cc7399748f.jpg │ ├── 9e9423fb042a609862a7ff3f932ec2c8.jpg │ ├── a010cd94962f84cdbf0d90738098f91b.jpg │ ├── a08a2a0fa10f83dd3ac4d6a522cfac63.jpg │ ├── a120a915e5c15c938d05dea860748ef8.jpg │ ├── a13188be15e2ac82686f1f589369a10b.jpg │ ├── a2ad957f7b00a1f98d76654c789980ab.jpg │ ├── a3440f56634da5279c28fde96a0a1599.jpg │ ├── a4495b68746da3b7651783fe7ad43b8c.jpg │ ├── a65f83358494936835dc0ec67e90d9a4.jpg │ ├── a905935fc7844a49e19d8d89ae14d9a9.jpg │ ├── ab3ba858f64515b244aaf4c65f86665b.jpg │ ├── ac750b028724d27b4ecca932cf385ede.jpg │ ├── accc28eb3b77ebc243b6e81da3d37d95.jpg │ ├── ad0e40cccb81f18ba9991557446e0bbc.jpg │ ├── aeabc0187ff6579f0cd1d504c33e3753.jpg │ ├── b05cf3eb427137839b8a0b6f8285cd18.jpg │ ├── b42847ae3eed88fbeec5fa73a360efa7.jpg │ ├── b5d20d7c07cd53b9f307917142ca3bb4.jpg │ ├── b6d2ac67e99c7000f7d106e19d1171ba.jpg │ ├── bbfe1461c481a9d20ccc0605674a3fed.jpg │ ├── bca488c8e5140d58f991399136c7ae50.jpg │ ├── bceb7b0a84c054f8a1fc906eb4ec71e5.jpg │ ├── bdc79463bac88ba093b02d27d14fae07.jpg │ ├── bf9732fdd8c8a78a7d7819df91bfaca1.jpg │ ├── bfe2e8c0e16d547d8a4478d30c08cdef.jpg │ ├── c26ebd1e6b8f074dc4500bff1df154b6.jpg │ ├── c38dbc9449b87fc58a45cc3ddf8829df.jpg │ ├── c4e4ed506f3af4f1b0cc30cc464a580a.jpg │ ├── c5c4d479e2ba2277ce6c597b3d5ae351.jpg │ ├── c76354f46b330f4d4481d069ad9d70d7.jpg │ ├── cb71552f439f179e838ed69dbbb0f474.jpg │ ├── d1174e35147eba352e4616832eef473a.jpg │ ├── d26b774dfc662e0341f420766b5cf56a.jpg │ ├── d2dc6763f8aaa1e4b1c7c45709bb2769.jpg │ ├── d328310df0f0ce78ed008227cf1b8dc9.jpg │ ├── d45796011254bc554dcdd9f0d8711d54.jpg │ ├── d85dd1811c07cbbff7bebf882747f96a.jpg │ ├── d8ca168b843d3ac06f9c8da9700eca7d.jpg │ ├── d968dfd7b4eccb1f662b88d45f179bce.jpg │ ├── d9da1f91e8a29f0132c40a31cd8302ca.jpg │ ├── db14263d5a46988e6474e8428b2365c0.jpg │ ├── db5d88d67ff62684a58369bd2e3c43c4.jpg │ ├── dd3e57783c8f887ec7b819bad1667466.jpg │ ├── e16846fcc11aa7185b512f34e43f5692.jpg │ ├── e179143703e1201fb546766484d6f4f2.jpg │ ├── e57bbe7c6a8374b52ffd4bd351d2c36e.jpg │ ├── e58ec24d4e189ca3ac9d11de01f0a98a.jpg │ ├── e66d2d59979633fbfef7ae54c171e568.jpg │ ├── e6cf9938988e74f590e478f06bfac9d2.jpg │ ├── ea42ba941eaf867f81a63f74dc14fe5a.jpg │ ├── eb52c823747b094ea0b78dc4048748c4.jpg │ ├── ecedb3799fe47c1597e06bd1f06823bc.jpg │ ├── f1ddf73005fa8555d5c0bc316058089b.jpg │ ├── f24e9f4ca55766f4a38b12be778900ca.jpg │ ├── f452adf39ee9d4ba9c363d7cd150a23d.jpg │ ├── f777a4a04df821c94d0f229ca540585b.jpg │ ├── f8876785918c078f9c0c36fe0e132bf8.jpg │ ├── f9825507e463920bb9d5e734ff3e0c54.jpg │ ├── f9d1c942cf4ed774d04525894f74b995.jpg │ ├── fb6227ef39eae29bd9f7a02d53759b03.jpg │ ├── fc28ba5ab17400ed866f879874e8d692.jpg │ ├── fd4135e931adde735d676f8cf5c89f87.jpg │ ├── qr_alipay.png │ ├── tex-0d61f8370cad1d412f80b84d143e1257.gif │ ├── tex-1271f64c0c70bad9a2c94b2e0d6cb71a.gif │ ├── tex-3230a38ff882eb696c8ef04f5aac538d.gif │ ├── tex-4144e097d2fa7a491cec2a7a4322f2bc.gif │ ├── tex-43f7edc01dee06930303a27d4a437ff4.gif │ ├── tex-4c3e4d06b33339c2972345ab3b86e312.gif │ ├── tex-56e7f66d849d2a6c1a430d38565c2e35.gif │ ├── tex-7c1bc20c016ab66f2b43e99fbf038c45.gif │ ├── tex-7fc56270e7a70fa81a5935b72eacbe29.gif │ ├── tex-8d01b3cac9bf4fcbde0c22b93e99aac0.gif │ ├── tex-903aed24476309827ae2cec60c543ebb.gif │ ├── tex-970be4fa707cabaac0de6542fd12a90b.gif │ ├── tex-980d35bc3500be6859da688d4bfb40d5.gif │ ├── tex-9d206c973ae429f0d3dfb23bbc31436b.gif │ ├── tex-9d5ed678fe57bcca610140957afab571.gif │ ├── tex-b86fc6b051f63d73de262d4c34e3a0a9.gif │ ├── tex-cc197a2629da3459df32e6fa7c6f234f.gif │ ├── tex-cdfdac1d7a23b2ba11787c5e4e6f118d.gif │ ├── tex-d01f63b6ba39b3c0633a67018c4ca39e.gif │ ├── tex-d6e0ba2ab427ca9639fc8c8b0eeadb15.gif │ ├── tex-d989ada5606fd3d7adc85665693e8678.gif │ └── tex-e362e2ca8fc64b381822c19a54c5c9ab.gif ├── index.html └── update.sh /.gitignore: -------------------------------------------------------------------------------- 1 | _book 2 | Thumbs.db 3 | -------------------------------------------------------------------------------- /.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/.nojekyll -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /404.html 3 | --- 4 | 5 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | ds100.apachecn.org -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # 贡献指南 2 | 3 | > 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错——在大部分情况下,我们的服务器已经记录所有的翻译,因此您不必担心会因为您的失误遭到无法挽回的破坏。(改编自维基百科) 4 | 5 | 负责人: 6 | 7 | + 飞龙:562826179 8 | 9 | ## 章节列表 10 | 11 | - [Web 技术](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/7.md) 12 | - [超文本传输协议](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/7.1.md) 13 | - [处理文本](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/8.md) 14 | - [python 字符串方法](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/8.1.md) 15 | - [正则表达式](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/8.2.md) 16 | - [regex 和 python](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/8.3.md) 17 | - [关系数据库和 SQL](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/9.md) 18 | - [关系模型](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/9.1.md) 19 | - [SQL](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/9.2.md) 20 | - [SQL 连接](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/9.3.md) 21 | - [建模与估计](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/10.md) 22 | - [模型](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/10.1.md) 23 | - [损失函数](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/10.2.md) 24 | - [绝对损失和 Huber 损失](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/10.3.md) 25 | - [梯度下降与数值优化](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/11.md) 26 | - [使用程序最小化损失](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/11.1.md) 27 | - [梯度下降](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/11.2.md) 28 | - [凸性](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/11.3.md) 29 | - [随机梯度下降法](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/11.4.md) 30 | - [概率与泛化](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/12.md) 31 | - [随机变量](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/12.1.md) 32 | - [期望和方差](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/12.2.md) 33 | - [风险](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/12.3.md) 34 | - [线性模型](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/13.md) 35 | - [预测小费金额](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/13.1.md) 36 | - [用梯度下降拟合线性模型](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/13.2.md) 37 | - [多元线性回归](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/13.3.md) 38 | - [最小二乘-几何透视](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/13.4.md) 39 | - [线性回归案例研究](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/13.5.md) 40 | - [特征工程](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/14.md) 41 | - [沃尔玛数据集](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/14.1.md) 42 | - [预测冰淇淋评级](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/14.2.md) 43 | - [偏方差权衡](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/15.md) 44 | - [风险和损失最小化](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/15.1.md) 45 | - [模型偏差和方差](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/15.2.md) 46 | - [交叉验证](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/15.3.md) 47 | - [正规化](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/16.md) 48 | - [正则化直觉](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/16.1.md) 49 | - [L2 正则化:岭回归](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/16.2.md) 50 | - [L1 正则化:LASSO 回归](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/16.3.md) 51 | - [分类](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/17.md) 52 | - [概率回归](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/17.1.md) 53 | - [Logistic 模型](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/17.2.md) 54 | - [Logistic 模型的损失函数](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/17.3.md) 55 | - [使用逻辑回归](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/17.4.md) 56 | - [经验概率分布的近似](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/17.5.md) 57 | - [拟合 Logistic 模型](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/17.6.md) 58 | - [评估 Logistic 模型](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/17.7.md) 59 | - [多类分类](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/17.8.md) 60 | - [统计推断](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/18.md) 61 | - [假设检验和置信区间](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/18.1.md) 62 | - [置换检验](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/18.2.md) 63 | - [线性回归的自举(真系数的推断)](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/18.3.md) 64 | - [学生化自举](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/18.4.md) 65 | - [P-HACKING](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/18.5.md) 66 | - [向量空间回顾](https://github.com/apachecn/ds100-textbook-zh/blob/master/docs/19.md) 67 | 68 | ## 流程 69 | 70 | ### 一、认领 71 | 72 | 首先查看[整体进度](https://github.com/apachecn/ds100-textbook-zh/issues/2),确认没有人认领了你想认领的章节。 73 | 74 | 然后回复 ISSUE,注明“章节 + QQ 号”(一定要留 QQ)。 75 | 76 | ### 二、校对 77 | 78 | 需要校对: 79 | 80 | 1. 语法 81 | 2. 术语使用 82 | 3. 文档格式 83 | 84 | 如果觉得现有翻译不好,重新翻译也是可以的。 85 | 86 | ### 三、提交 87 | 88 | + `fork` Github 项目 89 | + 修改`docs`中的文档。 90 | + `push` 91 | + `pull request` 92 | 93 | 请见 [Github 入门指南](https://github.com/apachecn/kaggle/blob/master/docs/GitHub)。 94 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM httpd:2.4 2 | COPY ./ /usr/local/apache2/htdocs/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UCB DS100 数据科学的原理与技巧 2 | 3 | > 原书:[DS-100/textbook](https://github.com/DS-100/textbook/) 4 | > 5 | > 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) 6 | > 7 | > 理论上,理论和实践是没有差异的。但实践中,是有的。——Jan L. A. van de Snepscheut 8 | 9 | * [在线阅读](https://ds100.apachecn.org) 10 | * [在线阅读(Gitee)](https://apachecn.gitee.io/ds100-textbook-zh/) 11 | * [ApacheCN 机器学习交流群 629470233](http://shang.qq.com/wpa/qunwpa?idkey=30e5f1123a79867570f665aa3a483ca404b1c3f77737bc01ec520ed5f078ddef) 12 | * [ApacheCN 学习资源](http://www.apachecn.org/) 13 | * [UCB Data8 课本:计算与推断思维](https://github.com/apachecn/data8-textbook-zh) 14 | * [UCB Prob140 课本:面向数据科学的概率论](https://github.com/apachecn/prob140-textbook-zh) 15 | 16 | ## 下载 17 | 18 | ### Docker 19 | 20 | ``` 21 | docker pull apachecn0/ds100-textbook-zh 22 | docker run -tid -p :80 apachecn0/ds100-textbook-zh 23 | # 访问 http://localhost:{port} 查看文档 24 | ``` 25 | 26 | ### PYPI 27 | 28 | ``` 29 | pip install ds100-textbook-zh 30 | ds100-textbook-zh 31 | # 访问 http://localhost:{port} 查看文档 32 | ``` 33 | 34 | ### NPM 35 | 36 | ``` 37 | npm install -g dsyilingling-textbook-zh 38 | dsyilingling-textbook-zh 39 | # 访问 http://localhost:{port} 查看文档 40 | ``` 41 | 42 | ## 贡献指南 43 | 44 | 项目当前处于校对阶段,请查看[贡献指南](CONTRIBUTING.md),并在[整体进度](https://github.com/apachecn/ds100-textbook-zh/issues/2)中领取任务。 45 | 46 | > 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错——在大部分情况下,我们的服务器已经记录所有的翻译,因此您不必担心会因为您的失误遭到无法挽回的破坏。(改编自维基百科) 47 | 48 | ## 联系方式 49 | 50 | ### 负责人 51 | 52 | * [飞龙](https://github.com/wizardforcel): 562826179 53 | 54 | ### 其他 55 | 56 | * 在我们的 [apachecn/ds100-textbook-zh](https://github.com/apachecn/ds100-textbook-zh) github 上提 issue. 57 | * 发邮件到 Email: `apachecn@163.com`. 58 | * 在我们的 [组织学习交流群](http://www.apachecn.org/organization/348.html) 中联系群主/管理员即可. 59 | 60 | ## 赞助我们 61 | 62 | ![](http://data.apachecn.org/img/about/donate.jpg) 63 | -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | + [一、数据科学的生命周期](docs/1.md) 2 | + [二、数据生成](docs/2.md) 3 | + [三、处理表格数据](docs/3.md) 4 | + [四、数据清理](docs/4.md) 5 | + [五、探索性数据分析](docs/5.md) 6 | + [六、数据可视化](docs/6.md) 7 | + [Web 技术](docs/7.md) 8 | + [超文本传输协议](docs/7.1.md) 9 | + [处理文本](docs/8.md) 10 | + [python 字符串方法](docs/8.1.md) 11 | + [正则表达式](docs/8.2.md) 12 | + [regex 和 python](docs/8.3.md) 13 | + [关系数据库和 SQL](docs/9.md) 14 | + [关系模型](docs/9.1.md) 15 | + [SQL](docs/9.2.md) 16 | + [SQL 连接](docs/9.3.md) 17 | + [建模与估计](docs/10.md) 18 | + [模型](docs/10.1.md) 19 | + [损失函数](docs/10.2.md) 20 | + [绝对损失和 Huber 损失](docs/10.3.md) 21 | + [梯度下降与数值优化](docs/11.md) 22 | + [使用程序最小化损失](docs/11.1.md) 23 | + [梯度下降](docs/11.2.md) 24 | + [凸性](docs/11.3.md) 25 | + [随机梯度下降法](docs/11.4.md) 26 | + [概率与泛化](docs/12.md) 27 | + [随机变量](docs/12.1.md) 28 | + [期望和方差](docs/12.2.md) 29 | + [风险](docs/12.3.md) 30 | + [线性模型](docs/13.md) 31 | + [预测小费金额](docs/13.1.md) 32 | + [用梯度下降拟合线性模型](docs/13.2.md) 33 | + [多元线性回归](docs/13.3.md) 34 | + [最小二乘-几何透视](docs/13.4.md) 35 | + [线性回归案例研究](docs/13.5.md) 36 | + [特征工程](docs/14.md) 37 | + [沃尔玛数据集](docs/14.1.md) 38 | + [预测冰淇淋评级](docs/14.2.md) 39 | + [偏方差权衡](docs/15.md) 40 | + [风险和损失最小化](docs/15.1.md) 41 | + [模型偏差和方差](docs/15.2.md) 42 | + [交叉验证](docs/15.3.md) 43 | + [正规化](docs/16.md) 44 | + [正则化直觉](docs/16.1.md) 45 | + [L2 正则化:岭回归](docs/16.2.md) 46 | + [L1 正则化:LASSO 回归](docs/16.3.md) 47 | + [分类](docs/17.md) 48 | + [概率回归](docs/17.1.md) 49 | + [Logistic 模型](docs/17.2.md) 50 | + [Logistic 模型的损失函数](docs/17.3.md) 51 | + [使用逻辑回归](docs/17.4.md) 52 | + [经验概率分布的近似](docs/17.5.md) 53 | + [拟合 Logistic 模型](docs/17.6.md) 54 | + [评估 Logistic 模型](docs/17.7.md) 55 | + [多类分类](docs/17.8.md) 56 | + [统计推断](docs/18.md) 57 | + [假设检验和置信区间](docs/18.1.md) 58 | + [置换检验](docs/18.2.md) 59 | + [线性回归的自举(真系数的推断)](docs/18.3.md) 60 | + [学生化自举](docs/18.4.md) 61 | + [P-HACKING](docs/18.5.md) 62 | + [向量空间回顾](docs/19.md) 63 | + [参考表](docs/20.md) 64 | + [Pandas](docs/20.1.md) 65 | + [Seaborn](docs/20.2.md) 66 | + [Matplotlib](docs/20.3.md) 67 | + [Scikit Learn](docs/20.4.md) 68 | -------------------------------------------------------------------------------- /asset/docsify-apachecn-footer.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var footer = [ 3 | '
', 4 | '
', 5 | '

我们一直在努力

', 6 | '

apachecn/ds100-textbook-zh

', 7 | '

', 8 | ' ', 9 | ' ', 10 | ' ML | ApacheCN

', 11 | '

', 12 | '
', 13 | ' ', 17 | '
', 18 | '
' 19 | ].join('\n') 20 | var plugin = function(hook) { 21 | hook.afterEach(function(html) { 22 | return html + footer 23 | }) 24 | hook.doneEach(function() { 25 | (adsbygoogle = window.adsbygoogle || []).push({}) 26 | }) 27 | } 28 | var plugins = window.$docsify.plugins || [] 29 | plugins.push(plugin) 30 | window.$docsify.plugins = plugins 31 | })() -------------------------------------------------------------------------------- /asset/docsify-baidu-push.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var plugin = function(hook) { 3 | hook.doneEach(function() { 4 | new Image().src = 5 | '//api.share.baidu.com/s.gif?r=' + 6 | encodeURIComponent(document.referrer) + 7 | "&l=" + encodeURIComponent(location.href) 8 | }) 9 | } 10 | var plugins = window.$docsify.plugins || [] 11 | plugins.push(plugin) 12 | window.$docsify.plugins = plugins 13 | })() -------------------------------------------------------------------------------- /asset/docsify-baidu-stat.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var plugin = function(hook) { 3 | hook.doneEach(function() { 4 | window._hmt = window._hmt || [] 5 | var hm = document.createElement("script") 6 | hm.src = "https://hm.baidu.com/hm.js?" + window.$docsify.bdStatId 7 | document.querySelector("article").appendChild(hm) 8 | }) 9 | } 10 | var plugins = window.$docsify.plugins || [] 11 | plugins.push(plugin) 12 | window.$docsify.plugins = plugins 13 | })() -------------------------------------------------------------------------------- /asset/docsify-cnzz.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | var plugin = function(hook) { 3 | hook.doneEach(function() { 4 | var sc = document.createElement('script') 5 | sc.src = 'https://s5.cnzz.com/z_stat.php?id=' + 6 | window.$docsify.cnzzId + '&online=1&show=line' 7 | document.querySelector('article').appendChild(sc) 8 | }) 9 | } 10 | var plugins = window.$docsify.plugins || [] 11 | plugins.push(plugin) 12 | window.$docsify.plugins = plugins 13 | })() -------------------------------------------------------------------------------- /asset/docsify-copy-code.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * docsify-copy-code 3 | * v2.1.0 4 | * https://github.com/jperasmus/docsify-copy-code 5 | * (c) 2017-2019 JP Erasmus 6 | * MIT license 7 | */ 8 | !function(){"use strict";function r(o){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o})(o)}!function(o,e){void 0===e&&(e={});var t=e.insertAt;if(o&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],c=document.createElement("style");c.type="text/css","top"===t&&n.firstChild?n.insertBefore(c,n.firstChild):n.appendChild(c),c.styleSheet?c.styleSheet.cssText=o:c.appendChild(document.createTextNode(o))}}(".docsify-copy-code-button,.docsify-copy-code-button span{cursor:pointer;transition:all .25s ease}.docsify-copy-code-button{position:absolute;z-index:1;top:0;right:0;overflow:visible;padding:.65em .8em;border:0;border-radius:0;outline:0;font-size:1em;background:grey;background:var(--theme-color,grey);color:#fff;opacity:0}.docsify-copy-code-button span{border-radius:3px;background:inherit;pointer-events:none}.docsify-copy-code-button .error,.docsify-copy-code-button .success{position:absolute;z-index:-100;top:50%;left:0;padding:.5em .65em;font-size:.825em;opacity:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.docsify-copy-code-button.error .error,.docsify-copy-code-button.success .success{opacity:1;-webkit-transform:translate(-115%,-50%);transform:translate(-115%,-50%)}.docsify-copy-code-button:focus,pre:hover .docsify-copy-code-button{opacity:1}"),document.querySelector('link[href*="docsify-copy-code"]')&&console.warn("[Deprecation] Link to external docsify-copy-code stylesheet is no longer necessary."),window.DocsifyCopyCodePlugin={init:function(){return function(o,e){o.ready(function(){console.warn("[Deprecation] Manually initializing docsify-copy-code using window.DocsifyCopyCodePlugin.init() is no longer necessary.")})}}},window.$docsify=window.$docsify||{},window.$docsify.plugins=[function(o,s){o.doneEach(function(){var o=Array.apply(null,document.querySelectorAll("pre[data-lang]")),c={buttonText:"Copy to clipboard",errorText:"Error",successText:"Copied"};s.config.copyCode&&Object.keys(c).forEach(function(t){var n=s.config.copyCode[t];"string"==typeof n?c[t]=n:"object"===r(n)&&Object.keys(n).some(function(o){var e=-1',''.concat(c.buttonText,""),''.concat(c.errorText,""),''.concat(c.successText,""),""].join("");o.forEach(function(o){o.insertAdjacentHTML("beforeend",e)})}),o.mounted(function(){document.querySelector(".content").addEventListener("click",function(o){if(o.target.classList.contains("docsify-copy-code-button")){var e="BUTTON"===o.target.tagName?o.target:o.target.parentNode,t=document.createRange(),n=e.parentNode.querySelector("code"),c=window.getSelection();t.selectNode(n),c.removeAllRanges(),c.addRange(t);try{document.execCommand("copy")&&(e.classList.add("success"),setTimeout(function(){e.classList.remove("success")},1e3))}catch(o){console.error("docsify-copy-code: ".concat(o)),e.classList.add("error"),setTimeout(function(){e.classList.remove("error")},1e3)}"function"==typeof(c=window.getSelection()).removeRange?c.removeRange(t):"function"==typeof c.removeAllRanges&&c.removeAllRanges()}})})}].concat(window.$docsify.plugins||[])}(); 9 | //# sourceMappingURL=docsify-copy-code.min.js.map 10 | -------------------------------------------------------------------------------- /asset/prism-darcula.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Darcula theme 3 | * 4 | * Adapted from a theme based on: 5 | * IntelliJ Darcula Theme (https://github.com/bulenkov/Darcula) 6 | * 7 | * @author Alexandre Paradis 8 | * @version 1.0 9 | */ 10 | 11 | code[class*="lang-"], 12 | pre[data-lang] { 13 | color: #a9b7c6 !important; 14 | background-color: #2b2b2b !important; 15 | font-family: Consolas, Monaco, 'Andale Mono', monospace; 16 | direction: ltr; 17 | text-align: left; 18 | white-space: pre; 19 | word-spacing: normal; 20 | word-break: normal; 21 | line-height: 1.5; 22 | 23 | -moz-tab-size: 4; 24 | -o-tab-size: 4; 25 | tab-size: 4; 26 | 27 | -webkit-hyphens: none; 28 | -moz-hyphens: none; 29 | -ms-hyphens: none; 30 | hyphens: none; 31 | } 32 | 33 | pre[data-lang]::-moz-selection, pre[data-lang] ::-moz-selection, 34 | code[class*="lang-"]::-moz-selection, code[class*="lang-"] ::-moz-selection { 35 | color: inherit; 36 | background: rgba(33, 66, 131, .85); 37 | } 38 | 39 | pre[data-lang]::selection, pre[data-lang] ::selection, 40 | code[class*="lang-"]::selection, code[class*="lang-"] ::selection { 41 | color: inherit; 42 | background: rgba(33, 66, 131, .85); 43 | } 44 | 45 | /* Code blocks */ 46 | pre[data-lang] { 47 | padding: 1em; 48 | margin: .5em 0; 49 | overflow: auto; 50 | } 51 | 52 | :not(pre) > code[class*="lang-"], 53 | pre[data-lang] { 54 | background: #2b2b2b; 55 | } 56 | 57 | /* Inline code */ 58 | :not(pre) > code[class*="lang-"] { 59 | padding: .1em; 60 | border-radius: .3em; 61 | } 62 | 63 | .token.comment, 64 | .token.prolog, 65 | .token.cdata { 66 | color: #808080; 67 | } 68 | 69 | .token.delimiter, 70 | .token.boolean, 71 | .token.keyword, 72 | .token.selector, 73 | .token.important, 74 | .token.atrule { 75 | color: #cc7832; 76 | } 77 | 78 | .token.operator, 79 | .token.punctuation, 80 | .token.attr-name { 81 | color: #a9b7c6; 82 | } 83 | 84 | .token.tag, 85 | .token.tag .punctuation, 86 | .token.doctype, 87 | .token.builtin { 88 | color: #e8bf6a; 89 | } 90 | 91 | .token.entity, 92 | .token.number, 93 | .token.symbol { 94 | color: #6897bb; 95 | } 96 | 97 | .token.property, 98 | .token.constant, 99 | .token.variable { 100 | color: #9876aa; 101 | } 102 | 103 | .token.string, 104 | .token.char { 105 | color: #6a8759; 106 | } 107 | 108 | .token.attr-value, 109 | .token.attr-value .punctuation { 110 | color: #a5c261; 111 | } 112 | 113 | .token.attr-value .punctuation:first-child { 114 | color: #a9b7c6; 115 | } 116 | 117 | .token.url { 118 | color: #287bde; 119 | text-decoration: underline; 120 | } 121 | 122 | .token.function { 123 | color: #ffc66d; 124 | } 125 | 126 | .token.regex { 127 | background: #364135; 128 | } 129 | 130 | .token.bold { 131 | font-weight: bold; 132 | } 133 | 134 | .token.italic { 135 | font-style: italic; 136 | } 137 | 138 | .token.inserted { 139 | background: #294436; 140 | } 141 | 142 | .token.deleted { 143 | background: #484a4a; 144 | } 145 | 146 | code.lang-css .token.property, 147 | code.lang-css .token.property + .token.punctuation { 148 | color: #a9b7c6; 149 | } 150 | 151 | code.lang-css .token.id { 152 | color: #ffc66d; 153 | } 154 | 155 | code.lang-css .token.selector > .token.class, 156 | code.lang-css .token.selector > .token.attribute, 157 | code.lang-css .token.selector > .token.pseudo-class, 158 | code.lang-css .token.selector > .token.pseudo-element { 159 | color: #ffc66d; 160 | } -------------------------------------------------------------------------------- /asset/prism-python.min.js: -------------------------------------------------------------------------------- 1 | Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python; -------------------------------------------------------------------------------- /asset/search.min.js: -------------------------------------------------------------------------------- 1 | !function(){var h={},f={EXPIRE_KEY:"docsify.search.expires",INDEX_KEY:"docsify.search.index"};function l(e){var n={"&":"&","<":"<",">":">",'"':""","'":"'"};return String(e).replace(/[&<>"']/g,function(e){return n[e]})}function p(e){return e.text||"table"!==e.type||(e.cells.unshift(e.header),e.text=e.cells.map(function(e){return e.join(" | ")}).join(" |\n ")),e.text}function u(r,e,i,o){void 0===e&&(e="");var s,n=window.marked.lexer(e),c=window.Docsify.slugify,d={};return n.forEach(function(e){if("heading"===e.type&&e.depth<=o){var n=function(e){void 0===e&&(e="");var a={};return{str:e=e&&e.replace(/^'/,"").replace(/'$/,"").replace(/(?:^|\s):([\w-]+:?)=?([\w-%]+)?/g,function(e,n,t){return-1===n.indexOf(":")?(a[n]=t&&t.replace(/"/g,"")||!0,""):e}).trim(),config:a}}(e.text),t=n.str,a=n.config;s=a.id?i.toURL(r,{id:c(a.id)}):i.toURL(r,{id:c(l(e.text))}),d[s]={slug:s,title:t,body:""}}else{if(!s)return;d[s]?d[s].body?(e.text=p(e),d[s].body+="\n"+(e.text||"")):(e.text=p(e),d[s].body=d[s].body?d[s].body+e.text:e.text):d[s]={slug:s,title:"",body:""}}}),c.clear(),d}function c(e){var r=[],i=[];Object.keys(h).forEach(function(n){i=i.concat(Object.keys(h[n]).map(function(e){return h[n][e]}))});var o=(e=e.trim()).split(/[\s\-,\\/]+/);1!==o.length&&(o=[].concat(e,o));function n(e){var n=i[e],s=0,c="",d=n.title&&n.title.trim(),p=n.body&&n.body.trim(),t=n.slug||"";if(d&&(o.forEach(function(e){var n,t=new RegExp(e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&"),"gi"),a=-1;if(n=d?d.search(t):-1,a=p?p.search(t):-1,0<=n||0<=a){s+=0<=n?3:0<=a?2:0,a<0&&(a=0);var r,i=0;i=0==(r=a<11?0:a-10)?70:a+e.length+60,p&&i>p.length&&(i=p.length);var o="..."+l(p).substring(r,i).replace(t,function(e){return''+e+""})+"...";c+=o}}),0\n\n

'+e.title+"

\n

"+e.content+"

\n
\n"}),t.classList.add("show"),a.classList.add("show"),t.innerHTML=s||'

'+m+"

",d.hideOtherSidebarContent&&(r.classList.add("hide"),i.classList.add("hide"))}function a(e){d=e}function o(e,n){var t=n.router.parse().query.s;a(e),Docsify.dom.style("\n.sidebar {\n padding-top: 0;\n}\n\n.search {\n margin-bottom: 20px;\n padding: 6px;\n border-bottom: 1px solid #eee;\n}\n\n.search .input-wrap {\n display: flex;\n align-items: center;\n}\n\n.search .results-panel {\n display: none;\n}\n\n.search .results-panel.show {\n display: block;\n}\n\n.search input {\n outline: none;\n border: none;\n width: 100%;\n padding: 0 7px;\n line-height: 36px;\n font-size: 14px;\n border: 1px solid transparent;\n}\n\n.search input:focus {\n box-shadow: 0 0 5px var(--theme-color, #42b983);\n border: 1px solid var(--theme-color, #42b983);\n}\n\n.search input::-webkit-search-decoration,\n.search input::-webkit-search-cancel-button,\n.search input {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.search .clear-button {\n cursor: pointer;\n width: 36px;\n text-align: right;\n display: none;\n}\n\n.search .clear-button.show {\n display: block;\n}\n\n.search .clear-button svg {\n transform: scale(.5);\n}\n\n.search h2 {\n font-size: 17px;\n margin: 10px 0;\n}\n\n.search a {\n text-decoration: none;\n color: inherit;\n}\n\n.search .matching-post {\n border-bottom: 1px solid #eee;\n}\n\n.search .matching-post:last-child {\n border-bottom: 0;\n}\n\n.search p {\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.search p.empty {\n text-align: center;\n}\n\n.app-name.hide, .sidebar-nav.hide {\n display: none;\n}"),function(e){void 0===e&&(e="");var n='
\n \n
\n \n \n \n \n \n
\n
\n
\n ',t=Docsify.dom.create("div",n),a=Docsify.dom.find("aside");Docsify.dom.toggleClass(t,"search"),Docsify.dom.before(a,t)}(t),function(){var e,n=Docsify.dom.find("div.search"),t=Docsify.dom.find(n,"input"),a=Docsify.dom.find(n,".input-wrap");Docsify.dom.on(n,"click",function(e){return-1===["A","H2","P","EM"].indexOf(e.target.tagName)&&e.stopPropagation()}),Docsify.dom.on(t,"input",function(n){clearTimeout(e),e=setTimeout(function(e){return r(n.target.value.trim())},100)}),Docsify.dom.on(a,"click",function(e){"INPUT"!==e.target.tagName&&(t.value="",r())})}(),t&&setTimeout(function(e){return r(t)},500)}function s(e,n){a(e),function(e,n){var t=Docsify.dom.getNode('.search input[type="search"]');if(t)if("string"==typeof e)t.placeholder=e;else{var a=Object.keys(e).filter(function(e){return-1ul:nth-child(1) { 3 | display: none; 4 | } 5 | 6 | #main>ul:nth-child(2) { 7 | display: none; 8 | } 9 | 10 | .markdown-section h1 { 11 | margin: 3rem 0 2rem 0; 12 | } 13 | 14 | .markdown-section h2 { 15 | margin: 2rem 0 1rem; 16 | } 17 | 18 | img, 19 | pre { 20 | border-radius: 8px; 21 | } 22 | 23 | .content, 24 | .sidebar, 25 | .markdown-section, 26 | body, 27 | .search input { 28 | background-color: rgba(243, 242, 238, 1) !important; 29 | } 30 | 31 | @media (min-width:600px) { 32 | .sidebar-toggle { 33 | background-color: #f3f2ee; 34 | } 35 | } 36 | 37 | .docsify-copy-code-button { 38 | background: #f8f8f8 !important; 39 | color: #7a7a7a !important; 40 | } 41 | 42 | body { 43 | /*font-family: Microsoft YaHei, Source Sans Pro, Helvetica Neue, Arial, sans-serif !important;*/ 44 | } 45 | 46 | .markdown-section>p { 47 | font-size: 16px !important; 48 | } 49 | 50 | .markdown-section pre>code { 51 | font-family: Consolas, Roboto Mono, Monaco, courier, monospace !important; 52 | font-size: .9rem !important; 53 | 54 | } 55 | 56 | /*.anchor span { 57 | color: rgb(66, 185, 131); 58 | }*/ 59 | 60 | section.cover h1 { 61 | margin: 0; 62 | } 63 | 64 | body>section>div.cover-main>ul>li>a { 65 | color: #42b983; 66 | } 67 | 68 | .markdown-section img { 69 | box-shadow: 7px 9px 10px #aaa !important; 70 | } 71 | 72 | 73 | pre { 74 | background-color: #f3f2ee !important; 75 | } 76 | 77 | @media (min-width:600px) { 78 | pre code { 79 | /*box-shadow: 2px 1px 20px 2px #aaa;*/ 80 | /*border-radius: 10px !important;*/ 81 | padding-left: 20px !important; 82 | } 83 | } 84 | 85 | @media (max-width:600px) { 86 | pre { 87 | padding-left: 0px !important; 88 | padding-right: 0px !important; 89 | } 90 | } 91 | 92 | .markdown-section pre { 93 | padding-left: 0 !important; 94 | padding-right: 0px !important; 95 | box-shadow: 2px 1px 20px 2px #aaa; 96 | } -------------------------------------------------------------------------------- /docs/10.1.md: -------------------------------------------------------------------------------- 1 | # 模型 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/10/modeling_simple.html](https://www.bookbookmark.ds100.org/ch/10/modeling_simple.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/10')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | 在美国,许多用餐者会在用餐者付钱时给他们的服务员留下小费。尽管美国习惯于提供 15%的小费,但也许有些餐馆的顾客比其他餐馆更慷慨。 46 | 47 | 一个特别的服务员对他能得到多少小费非常感兴趣,他收集了他在一个月工作期间提供的所有桌子的信息。 48 | 49 | ``` 50 | # HIDDEN 51 | tips = sns.load_dataset('tips') 52 | tips 53 | 54 | ``` 55 | 56 | | | 账单合计 | 提示 | 性别 | 吸烟者 | 白天 | 时间 | 大小 | 57 | | --- | --- | --- | --- | --- | --- | --- | --- | 58 | | 零 | 十六点九九 | 1.01 年 | 女性 | 不 | 太阳 | 晚餐 | 二 | 59 | | --- | --- | --- | --- | --- | --- | --- | --- | 60 | | 1 个 | 十点三四 | 一点六六 | 男性 | No | Sun | Dinner | 三 | 61 | | --- | --- | --- | --- | --- | --- | --- | --- | 62 | | 二 | 二十一点零一 | 3.50 美元 | Male | No | Sun | Dinner | 3 | 63 | | --- | --- | --- | --- | --- | --- | --- | --- | 64 | | …… | …… | ... | ... | ... | ... | ... | ... | 65 | | --- | --- | --- | --- | --- | --- | --- | --- | 66 | | 241 个 | 二十二点六七 | 2.00 美元 | Male | 是的 | 坐 | Dinner | 2 | 67 | | --- | --- | --- | --- | --- | --- | --- | --- | 68 | | 二百四十二 | 十七点八二 | 1.75 美元 | Male | No | Sat | Dinner | 2 | 69 | | --- | --- | --- | --- | --- | --- | --- | --- | 70 | | 二百四十三 | 十八点七八 | 3 点 | Female | No | 周四 | Dinner | 2 | 71 | | --- | --- | --- | --- | --- | --- | --- | --- | 72 | 73 | 244 行×7 列 74 | 75 | 我们可以绘制尖端数量的柱状图: 76 | 77 | ``` 78 | # HIDDEN 79 | sns.distplot(tips['tip'], bins=np.arange(0, 10.1, 0.25), rug=True) 80 | plt.xlabel('Tip Amount in Dollars') 81 | plt.ylabel('Proportion per Dollar'); 82 | 83 | ``` 84 | 85 | ![](img/e66d2d59979633fbfef7ae54c171e568.jpg) 86 | 87 | 数据中已经有一些有趣的模式。例如,有一个清晰的模式是 2 美元,大多数提示似乎是 0.50 美元的倍数。 88 | 89 | 目前,我们对小费百分比最感兴趣:小费金额除以账单金额。我们可以在数据框架中为这个变量创建一个列并显示它的分布。 90 | 91 | ``` 92 | # HIDDEN 93 | tips['pcttip'] = tips['tip'] / tips['total_bill'] * 100 94 | sns.distplot(tips['pcttip'], rug=True) 95 | plt.xlabel('Percent Tip Amount') 96 | plt.ylabel('Proportion per Percent'); 97 | 98 | ``` 99 | 100 | ![](img/0396507ddaf1d70ceb3fcfe12eeac42c.jpg) 101 | 102 | 看起来有一张桌子给了我们的服务员 70 美元的小费!然而,大部分小费百分比低于 30 美元。让我们放大分布的那部分。 103 | 104 | ``` 105 | # HIDDEN 106 | sns.distplot(tips['pcttip'], bins=np.arange(30), rug=True) 107 | plt.xlim(0, 30) 108 | plt.xlabel('Percent Tip Amount') 109 | plt.ylabel('Proportion per Percent'); 110 | 111 | ``` 112 | 113 | ![](img/219120ca2794919935fe64d208dce73b.jpg) 114 | 115 | 我们可以看到分布大致集中在$15\%$和另一个潜在模式$20\%$之间。假设我们的服务员有兴趣预测他从一张给定的桌子上能得到多少小费。为了解决这个问题,我们可以创建一个服务生能得到多少小费的模型。 116 | 117 | ### 一个简单的模型 118 | 119 | 一个简单的模型是完全忽略数据,并声明由于美国的惯例是给 15%的小费,服务员总是从他的桌子上得到 15%的小费。虽然非常简单,但我们将使用这个模型来定义一些稍后将使用的变量。 120 | 121 | 这个模型假设有一个正确的百分比提示,所有的表,过去和未来,都将给服务员。这是百分比提示的 _ 填充参数 _,我们将用$\theta^*$表示。 122 | 123 | 在做出这个假设之后,我们的模型说我们对$\theta^*$的猜测是$15\%$。我们将使用$\theta$来表示当前的猜测。 124 | 125 | 在数学符号中,我们的模型指出: 126 | 127 | $$\theta=15$$ 128 | 129 | 如果模型是真的,那么这个模型显然是有问题的,我们数据集中的每个表都应该给服务员 15%的小费。尽管如此,这个模型将对许多场景做出合理的猜测。事实上,如果我们没有其他信息,除了服务员受雇于美国之外,这个模型可能是最有用的选择。 130 | 131 | 但是,由于我们的服务生收集了数据,我们可以使用他的提示历史来创建模型,而不是仅根据惯例选择 15%。 132 | 133 | ### 损失函数直觉 134 | 135 | 为了方便起见,下面复制了数据集中提示百分比的分布。 136 | 137 | ``` 138 | # HIDDEN 139 | sns.distplot(tips['pcttip'], bins=np.arange(30), rug=True) 140 | plt.xlim(0, 30) 141 | plt.xlabel('Percent Tip Amount') 142 | plt.ylabel('Proportion per Percent'); 143 | 144 | ``` 145 | 146 | ![](img/907214087b3997cb4b3f1090ab6df057.jpg) 147 | 148 | 假设我们正在比较两个选项,分别是:$10\%$和$15\%$。我们可以在发行版上标记这两种选择: 149 | 150 | ``` 151 | # HIDDEN 152 | sns.distplot(tips['pcttip'], bins=np.arange(30), rug=True) 153 | 154 | plt.axvline(x=10, c='darkblue', linestyle='--', label=r'$ \theta = 10$') 155 | plt.axvline(x=15, c='darkgreen', linestyle='--', label=r'$ \theta = 15$') 156 | plt.legend() 157 | 158 | plt.xlim(0, 30) 159 | plt.xlabel('Percent Tip Amount') 160 | plt.ylabel('Proportion per Percent'); 161 | 162 | ``` 163 | 164 | ![](img/4e43bd60805eff5fc4f7ad0163dc79cd.jpg) 165 | 166 | 直观地说,在给定数据集的情况下,选择$\theta=15$比选择$\theta=10$更有意义。这是为什么?当我们查看数据中的点时,我们可以看到更多的点接近 15 美元,而不是 10 美元。 167 | 168 | 虽然看起来很明显,$\theta=15$比$\theta=10$是更好的选择,但还不太清楚,$\theta=15$是否比$\theta=16$更好。为了在不同的$\theta$值之间做出精确的选择,我们要为每个$\theta$值分配一个数字,该数字测量数据的“好”程度。也就是说,我们需要一个函数,它将输入一个$\theta$值和数据集中的点,输出一个单一的数字,我们将使用它来选择我们可以选择的最佳值$\theta$。 169 | 170 | 我们称此函数为**损失函数**。 -------------------------------------------------------------------------------- /docs/10.md: -------------------------------------------------------------------------------- 1 | # 建模与估计 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/10/modeling_intro.html](https://www.bookbookmark.ds100.org/ch/10/modeling_intro.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/10')) 13 | 14 | ``` 15 | 16 | > 基本上,所有模型都是错误的,但有些模型是有用的。 17 | > 18 | > -[George Box,统计学家(1919-2013)](https://www.wikiwand.com/en/George_E._P._Box) 19 | 20 | 我们已经讨论了问题制定、数据清理和探索性数据分析,这是数据科学生命周期的前三个步骤。我们还发现 EDA 经常揭示数据集中变量之间的关系。我们如何决定一段关系是真实的还是虚假的?我们如何利用这些关系对未来做出可靠的预测?为了回答这些问题,我们需要数学工具来建模和估计。 21 | 22 | 模型是系统的理想化(htg1)表示。例如,如果我们从比萨斜塔上落下一个钢球,一个简单的重力模型表明我们希望钢球落在地上,以 9.8 米/秒的速度加速。这个模型也可以让我们用抛射运动定律预测球撞击地面需要多长时间。 23 | 24 | 这个重力模型描述了我们的系统的行为,但只是一个近似值,它忽略了空气阻力、其他天体的重力效应和空气浮力的影响。由于这些无意识的因素,我们的模型在现实生活中几乎总是会做出错误的预测!尽管如此,简单的重力模型在如此多的情况下仍然足够精确,以至于今天它被广泛使用和教授。 25 | 26 | 类似地,我们使用数据定义的任何模型都是实际过程的近似值。当近似值不太严格时,我们的模型具有实际应用价值。这自然会引发一些基本问题。我们如何选择模型?我们如何知道我们是否需要一个更复杂的模型? 27 | 28 | 在本书的其余章节中,我们将开发计算工具来**设计模型并使其适合数据。我们还将介绍推理工具,使我们能够解释我们的模型将**归纳为感兴趣的人群的能力。**** -------------------------------------------------------------------------------- /docs/11.1.md: -------------------------------------------------------------------------------- 1 | # 使用程序最小化损失 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/11/gradient_basics.html](https://www.bookbookmark.ds100.org/ch/11/gradient_basics.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/11')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | ``` 46 | # HIDDEN 47 | def mse(theta, y_vals): 48 | return np.mean((y_vals - theta) ** 2) 49 | 50 | def points_and_loss(y_vals, xlim, loss_fn): 51 | thetas = np.arange(xlim[0], xlim[1] + 0.01, 0.05) 52 | losses = [loss_fn(theta, y_vals) for theta in thetas] 53 | 54 | plt.figure(figsize=(9, 2)) 55 | 56 | ax = plt.subplot(121) 57 | sns.rugplot(y_vals, height=0.3, ax=ax) 58 | plt.xlim(*xlim) 59 | plt.title('Points') 60 | plt.xlabel('Tip Percent') 61 | 62 | ax = plt.subplot(122) 63 | plt.plot(thetas, losses) 64 | plt.xlim(*xlim) 65 | plt.title(loss_fn.__name__) 66 | plt.xlabel(r'$ \theta $') 67 | plt.ylabel('Loss') 68 | plt.legend() 69 | 70 | ``` 71 | 72 | 让我们回到常量模型: 73 | 74 | $$ \theta = C $$ 75 | 76 | 我们将使用均方误差损失函数: 77 | 78 | $$ \begin{aligned} L(\theta, \textbf{y}) &= \frac{1}{n} \sum_{i = 1}^{n}(y_i - \theta)^2\\ \end{aligned} $$ 79 | 80 | 为了简单起见,我们将使用数据集$\textbf y=[12,13,15,16,17]$。从上一章的分析方法中我们知道,MSE 的最小$\theta$是$\text mean(\textbf y)=14.6$。让我们看看是否可以通过编写程序找到相同的值。 81 | 82 | 如果我们写得好,我们将能够在任何损失函数上使用相同的程序,以便找到$\theta$的最小值,包括数学上复杂的 Huber 损失: 83 | 84 | $$ L_\alpha(\theta, \textbf{y}) = \frac{1}{n} \sum_{i=1}^n \begin{cases} \frac{1}{2}(y_i - \theta)^2 & | y_i - \theta | \le \alpha \\ \alpha ( |y_i - \theta| - \frac{1}{2}\alpha ) & \text{otherwise} \end{cases} $$ 85 | 86 | 首先,我们创建数据点的地毯图。在地毯图的右侧,我们绘制了不同值($\theta$)的 MSE。 87 | 88 | ``` 89 | # HIDDEN 90 | pts = np.array([12, 13, 15, 16, 17]) 91 | points_and_loss(pts, (11, 18), mse) 92 | 93 | ``` 94 | 95 | ![](img/f9825507e463920bb9d5e734ff3e0c54.jpg) 96 | 97 | 我们如何编写一个程序来自动找到$\theta$的最小值?最简单的方法是计算许多值的损失。然后,我们可以返回导致最小损失的\theta$值。 98 | 99 | 我们定义了一个名为`simple_minimize`的函数,它接受一个丢失函数、一个数据点数组和一个要尝试的$\theta$值数组。 100 | 101 | ``` 102 | def simple_minimize(loss_fn, dataset, thetas): 103 | ''' 104 | Returns the value of theta in thetas that produces the least loss 105 | on a given dataset. 106 | ''' 107 | losses = [loss_fn(theta, dataset) for theta in thetas] 108 | return thetas[np.argmin(losses)] 109 | 110 | ``` 111 | 112 | 然后,我们可以定义一个函数来计算 mse 并将其传递到`simple_minimize`。 113 | 114 | ``` 115 | def mse(theta, dataset): 116 | return np.mean((dataset - theta) ** 2) 117 | 118 | dataset = np.array([12, 13, 15, 16, 17]) 119 | thetas = np.arange(12, 18, 0.1) 120 | 121 | simple_minimize(mse, dataset, thetas) 122 | 123 | ``` 124 | 125 | ``` 126 | 14.599999999999991 127 | ``` 128 | 129 | 这接近预期值: 130 | 131 | ``` 132 | # Compute the minimizing theta using the analytical formula 133 | np.mean(dataset) 134 | 135 | ``` 136 | 137 | ``` 138 | 14.6 139 | ``` 140 | 141 | 现在,我们可以定义一个函数来计算 Huber 损失,并将损失与$\theta$进行比较。 142 | 143 | ``` 144 | def huber_loss(theta, dataset, alpha = 1): 145 | d = np.abs(theta - dataset) 146 | return np.mean( 147 | np.where(d < alpha, 148 | (theta - dataset)**2 / 2.0, 149 | alpha * (d - alpha / 2.0)) 150 | ) 151 | 152 | ``` 153 | 154 | ``` 155 | # HIDDEN 156 | points_and_loss(pts, (11, 18), huber_loss) 157 | 158 | ``` 159 | 160 | ![](img/722776e1934b6d14f68a80cba34a7d66.jpg) 161 | 162 | 虽然我们可以看到,$\theta$的最小值应该接近 15,但是我们没有直接为 Huber 损失找到$\theta$的分析方法。相反,我们可以使用`simple_minimize`函数。 163 | 164 | ``` 165 | simple_minimize(huber_loss, dataset, thetas) 166 | 167 | ``` 168 | 169 | ``` 170 | 14.999999999999989 171 | ``` 172 | 173 | 现在,我们可以返回到 Tip 百分比的原始数据集,并使用 Huber 损失找到$\theta$的最佳值。 174 | 175 | ``` 176 | tips = sns.load_dataset('tips') 177 | tips['pcttip'] = tips['tip'] / tips['total_bill'] * 100 178 | tips.head() 179 | 180 | ``` 181 | 182 | | | 账单合计 | 提示 | 性别 | 吸烟者 | 白天 | 时间 | 大小 | PCTIP | 183 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | 184 | | 零 | 十六点九九 | 1.01 年 | 女性 | 不 | 太阳 | 晚餐 | 二 | 5.944673 页 | 185 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | 186 | | 1 个 | 十点三四 | 一点六六 | 男性 | No | Sun | Dinner | 三 | 16.054159 页 | 187 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | 188 | | 二 | 二十一点零一 | 3.50 美元 | Male | No | Sun | Dinner | 3 | 16.658734 | 189 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | 190 | | 三 | 二十三点六八 | 三点三一 | Male | No | Sun | Dinner | 2 | 13.978041 | 191 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | 192 | | 四 | 二十四点五九 | 三点六一 | Female | No | Sun | Dinner | 四 | 14.680765 个 | 193 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | 194 | 195 | ``` 196 | # HIDDEN 197 | points_and_loss(tips['pcttip'], (11, 20), huber_loss) 198 | 199 | ``` 200 | 201 | ![](img/e16846fcc11aa7185b512f34e43f5692.jpg) 202 | 203 | ``` 204 | simple_minimize(huber_loss, tips['pcttip'], thetas) 205 | 206 | ``` 207 | 208 | ``` 209 | 15.499999999999988 210 | ``` 211 | 212 | 我们可以看到,使用 Huber 损失给我们带来了\theta=15.5 美元。现在,我们可以比较 mse、mae 和 huber 损失的最小$\hat \theta 值。 213 | 214 | ``` 215 | print(f" MSE: theta_hat = {tips['pcttip'].mean():.2f}") 216 | print(f" MAE: theta_hat = {tips['pcttip'].median():.2f}") 217 | print(f" Huber loss: theta_hat = 15.50") 218 | 219 | ``` 220 | 221 | ``` 222 | MSE: theta_hat = 16.08 223 | MAE: theta_hat = 15.48 224 | Huber loss: theta_hat = 15.50 225 | 226 | ``` 227 | 228 | 我们可以看到,Huber 损失更接近 MAE,因为它受 Tip 百分比分布右侧的异常值影响较小: 229 | 230 | ``` 231 | sns.distplot(tips['pcttip'], bins=50); 232 | 233 | ``` 234 | 235 | ![](img/7caefdaf19673946794a05e6e9b8cd30.jpg) 236 | 237 | ## 与`simple_minimize`[¶](#Issues-with-simple_minimize)有关的问题 238 | 239 | 虽然`simple_minimize`允许我们最小化损失函数,但它有一些缺陷,使其不适合一般用途。它的主要问题是,它只使用预先确定的$theta$值进行测试。例如,在我们上面使用的代码片段中,我们必须在 12 到 18 之间手动定义$\theta$值。 240 | 241 | ``` 242 | dataset = np.array([12, 13, 15, 16, 17]) 243 | thetas = np.arange(12, 18, 0.1) 244 | 245 | simple_minimize(mse, dataset, thetas) 246 | 247 | ``` 248 | 249 | 我们如何知道检查 12 到 18 之间的范围?我们必须手动检查损耗函数的曲线图,并看到在这个范围内有一个最小值。当我们为模型增加额外的复杂性时,这个过程变得不切实际。此外,我们在上面的代码中手动指定了 0.1 的步长。然而,如果$\theta$的最佳值是 12.043,我们的`simple_minimize`函数将四舍五入到 12.00,即 0.1 的最接近倍数。 250 | 251 | 我们可以使用一个名为 _ 梯度下降 _ 的方法同时解决这两个问题。 -------------------------------------------------------------------------------- /docs/11.3.md: -------------------------------------------------------------------------------- 1 | # 凸性 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/11/gradient_convexity.html](https://www.bookbookmark.ds100.org/ch/11/gradient_convexity.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/11')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | ``` 46 | # HIDDEN 47 | tips = sns.load_dataset('tips') 48 | tips['pcttip'] = tips['tip'] / tips['total_bill'] * 100 49 | 50 | ``` 51 | 52 | ``` 53 | # HIDDEN 54 | def mse(theta, y_vals): 55 | return np.mean((y_vals - theta) ** 2) 56 | 57 | def abs_loss(theta, y_vals): 58 | return np.mean(np.abs(y_vals - theta)) 59 | 60 | def quartic_loss(theta, y_vals): 61 | return np.mean(1/5000 * (y_vals - theta + 12) * (y_vals - theta + 23) 62 | * (y_vals - theta - 14) * (y_vals - theta - 15) + 7) 63 | 64 | def grad_quartic_loss(theta, y_vals): 65 | return -1/2500 * (2 *(y_vals - theta)**3 + 9*(y_vals - theta)**2 66 | - 529*(y_vals - theta) - 327) 67 | 68 | def plot_loss(y_vals, xlim, loss_fn): 69 | thetas = np.arange(xlim[0], xlim[1] + 0.01, 0.05) 70 | losses = [loss_fn(theta, y_vals) for theta in thetas] 71 | 72 | plt.figure(figsize=(5, 3)) 73 | plt.plot(thetas, losses, zorder=1) 74 | plt.xlim(*xlim) 75 | plt.title(loss_fn.__name__) 76 | plt.xlabel(r'$ \theta $') 77 | plt.ylabel('Loss') 78 | 79 | def plot_theta_on_loss(y_vals, theta, loss_fn, **kwargs): 80 | loss = loss_fn(theta, y_vals) 81 | default_args = dict(label=r'$ \theta $', zorder=2, 82 | s=200, c=sns.xkcd_rgb['green']) 83 | plt.scatter([theta], [loss], **{**default_args, **kwargs}) 84 | 85 | def plot_connected_thetas(y_vals, theta_1, theta_2, loss_fn, **kwargs): 86 | plot_theta_on_loss(y_vals, theta_1, loss_fn) 87 | plot_theta_on_loss(y_vals, theta_2, loss_fn) 88 | loss_1 = loss_fn(theta_1, y_vals) 89 | loss_2 = loss_fn(theta_2, y_vals) 90 | plt.plot([theta_1, theta_2], [loss_1, loss_2]) 91 | 92 | ``` 93 | 94 | ``` 95 | # HIDDEN 96 | def plot_one_gd_iter(y_vals, theta, loss_fn, grad_loss, alpha=2.5): 97 | new_theta = theta - alpha * grad_loss(theta, y_vals) 98 | plot_loss(pts, (-23, 25), loss_fn) 99 | plot_theta_on_loss(pts, theta, loss_fn, c='none', 100 | edgecolor=sns.xkcd_rgb['green'], linewidth=2) 101 | plot_theta_on_loss(pts, new_theta, loss_fn) 102 | print(f'old theta: {theta}') 103 | print(f'new theta: {new_theta[0]}') 104 | 105 | ``` 106 | 107 | 梯度下降提供了一种最小化函数的一般方法。我们观察到 Huber 损耗,当函数的最小值难以解析地找到时,梯度下降特别有用。 108 | 109 | ## 梯度下降找到局部最小值[¶](#Gradient-Descent-Finds-Local-Minima) 110 | 111 | 不幸的是,梯度下降并不总是找到全局最小化的$\theta$。考虑使用下面的损失函数的初始$\theta=-21$进行以下梯度下降运行。 112 | 113 | ``` 114 | # HIDDEN 115 | pts = np.array([0]) 116 | plot_loss(pts, (-23, 25), quartic_loss) 117 | plot_theta_on_loss(pts, -21, quartic_loss) 118 | 119 | ``` 120 | 121 | ![](img/2e7620847d331c0912cf9dbc85774b88.jpg) 122 | 123 | ``` 124 | # HIDDEN 125 | plot_one_gd_iter(pts, -21, quartic_loss, grad_quartic_loss) 126 | 127 | ``` 128 | 129 | ``` 130 | old theta: -21 131 | new theta: -9.944999999999999 132 | 133 | ``` 134 | 135 | ![](img/e179143703e1201fb546766484d6f4f2.jpg) 136 | 137 | ``` 138 | # HIDDEN 139 | plot_one_gd_iter(pts, -9.9, quartic_loss, grad_quartic_loss) 140 | 141 | ``` 142 | 143 | ``` 144 | old theta: -9.9 145 | new theta: -12.641412 146 | 147 | ``` 148 | 149 | ![](img/1c244258ff328b51a885453d3f0de801.jpg) 150 | 151 | ``` 152 | # HIDDEN 153 | plot_one_gd_iter(pts, -12.6, quartic_loss, grad_quartic_loss) 154 | 155 | ``` 156 | 157 | ``` 158 | old theta: -12.6 159 | new theta: -14.162808 160 | 161 | ``` 162 | 163 | ![](img/f777a4a04df821c94d0f229ca540585b.jpg) 164 | 165 | ``` 166 | # HIDDEN 167 | plot_one_gd_iter(pts, -14.2, quartic_loss, grad_quartic_loss) 168 | 169 | ``` 170 | 171 | ``` 172 | old theta: -14.2 173 | new theta: -14.497463999999999 174 | 175 | ``` 176 | 177 | ![](img/19b6f7050bb66736a7fb5e0f9035e5b6.jpg) 178 | 179 | 在这个损失函数和$theta$值上,梯度下降收敛到$theta=-14.5$,产生大约 8 的损失。但是,这个损失函数的全局最小值是$\theta=18$,相当于几乎为零的损失。从这个例子中,我们观察到梯度下降发现了一个局部最小值 _,它可能不一定具有与 _ 全局最小值 _ 相同的损失。_ 180 | 181 | 幸运的是,许多有用的损失函数具有相同的局部和全局最小值。考虑常见的均方误差损失函数,例如: 182 | 183 | ``` 184 | # HIDDEN 185 | pts = np.array([-2, -1, 1]) 186 | plot_loss(pts, (-5, 5), mse) 187 | 188 | ``` 189 | 190 | ![](img/2a8aa0f7ee461e907d388c236969f203.jpg) 191 | 192 | 在这个损失函数上以适当的学习速率进行梯度下降,总是会找到全局最优的$\theta$,因为唯一的局部最小值也是全局最小值。 193 | 194 | 平均绝对误差有时有多个局部极小值。然而,所有的局部最小值产生的损失可能是全球最低的。 195 | 196 | ``` 197 | # HIDDEN 198 | pts = np.array([-1, 1]) 199 | plot_loss(pts, (-5, 5), abs_loss) 200 | 201 | ``` 202 | 203 | ![](img/4cf4e0313f8a9e9d323fdf241c00c692.jpg) 204 | 205 | 在这个损失函数上,梯度下降将收敛到$[-1,1]$范围内的一个局部极小值。由于所有这些局部极小值都具有此函数可能的最小损失,因此梯度下降仍将返回一个最优选择$\theta$。 206 | 207 | ## 凸性的定义 208 | 209 | 对于某些函数,任何局部最小值也是全局最小值。这组函数被称为**凸函数**,因为它们向上弯曲。对于常数模型,MSE、MAE 和 Huber 损耗都是凸的。 210 | 211 | 在适当的学习速率下,梯度下降找到凸损失函数的全局最优值。由于这个有用的性质,我们更喜欢使用凸损失函数来拟合我们的模型,除非我们有充分的理由不这样做。 212 | 213 | 形式上,函数$f$是凸的,前提是并且仅当它满足以下不等式时,对于所有可能的函数输入$a$和$b$,对于[0,1]$中的所有$t\ 214 | 215 | $$tf(a) + (1-t)f(b) \geq f(ta + (1-t)b)$$ 216 | 217 | 这个不等式表明,连接函数两点的所有线必须位于函数本身之上或之上。对于本节开头的损失函数,我们可以很容易地找到出现在图下面的一条线: 218 | 219 | ``` 220 | # HIDDEN 221 | pts = np.array([0]) 222 | plot_loss(pts, (-23, 25), quartic_loss) 223 | plot_connected_thetas(pts, -12, 12, quartic_loss) 224 | 225 | ``` 226 | 227 | ![](img/1981680eb840352e8c8cd53ba6edf6dc.jpg) 228 | 229 | 因此,这个损失函数是非凸的。 230 | 231 | 对于 mse,连接图上两点的所有线都显示在图的上方。我们在下面画一条这样的线。 232 | 233 | ``` 234 | # HIDDEN 235 | pts = np.array([0]) 236 | plot_loss(pts, (-23, 25), mse) 237 | plot_connected_thetas(pts, -12, 12, mse) 238 | 239 | ``` 240 | 241 | ![](img/88d60969e5869eb93f55cc9886c73bcb.jpg) 242 | 243 | 凸性的数学定义给了我们一个精确的方法来确定函数是否是凸的。在这本教科书中,我们将省略凸性的数学证明,而是说明所选的损失函数是否凸。 244 | 245 | ## 摘要[¶](#Summary) 246 | 247 | 对于凸函数,任何局部极小值也是全局极小值。这种有用的性质使得梯度下降能够有效地找到给定损失函数的全局最优模型参数。当非凸损失函数的梯度下降收敛到局部极小值时,这些局部极小值不能保证是全局最优的。 -------------------------------------------------------------------------------- /docs/11.4.md: -------------------------------------------------------------------------------- 1 | # 随机梯度下降法 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/11/gradient_randomatic.html](https://www.bookbookmark.ds100.org/ch/11/gradient_randomatic.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/11')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | 在本节中,我们将讨论对梯度下降的修改,这使得它对大型数据集更有用。修改后的算法称为**随机梯度下降**。 46 | 47 | 回忆梯度下降使用所选损失函数的梯度更新模型参数$\theta$。具体来说,我们使用了这个梯度更新公式: 48 | 49 | $$ {\theta}^{(t+1)} = \theta^{(t)} - \alpha \cdot \nabla_{\theta} L(\theta^{(t)}, \textbf{y}) $$ 50 | 51 | 在这个方程中: 52 | 53 | * $\theta^(t)$是我们在第$t$th 次迭代时对$\theta^*$的当前估计值。 54 | * $\alpha$是学习率 55 | * $是损失函数的梯度 56 | * 我们计算下一个估计值$\theta^(t+1)$减去以\theta^(t)(t)计算的$\alpha$和$\nabla \theta l(\theta,textbf y)$的乘积。$ 57 | 58 | ### 批梯度下降的限制 59 | 60 | 在上面的表达式中,我们使用损失函数$\ell(\theta,y_i)$的平均梯度(使用**整个数据集**计算$\nabla \theta(\theta,y)$的值。换句话说,每次更新$\theta$时,我们都会作为一个完整的批处理查询数据集中的所有其他点。因此,上面的梯度更新规则通常被称为**批梯度下降**。 61 | 62 | 不幸的是,我们经常使用大型数据集。虽然批量梯度下降通常会在相对较少的迭代中找到一个最优的$\theta$,但是如果训练集包含多个点,则每次迭代都需要很长的时间来计算。 63 | 64 | ### 随机梯度下降 65 | 66 | 为了避免在整个训练集中计算梯度的困难,随机梯度下降使用单个随机选择的数据点来近似整体梯度。由于观测是随机选择的,我们期望在每个单独观测中使用梯度最终会收敛到与批梯度下降相同的参数。 67 | 68 | 再次考虑批次梯度下降的公式: 69 | 70 | $$ {\theta}^{(t+1)} = \theta^{(t)} - \alpha \cdot \nabla_{\theta} L(\theta^{(t)}, \textbf{y}) $$ 71 | 72 | 在这个公式中,我们有一个术语“$\nabla \theta l(\theta ^(t)、\textbf y)”$,培训集中所有点的损失函数平均梯度。即: 73 | 74 | $$ \begin{aligned} \nabla_{\theta} L(\theta^{(t)}, \textbf{y}) &= \frac{1}{n} \sum_{i=1}^{n} \nabla_{\theta} \ell(\theta^{(t)}, y_i) \end{aligned} $$ 75 | 76 | 其中,$\ell(\theta,y_i)$是训练集中某一点的损失。为了进行随机梯度下降,我们只需将平均梯度替换为单点的梯度。随机梯度下降的梯度更新公式为: 77 | 78 | $$ {\theta}^{(t+1)} = \theta^{(t)} - \alpha \cdot \nabla_{\theta} \ell(\theta^{(t)}, y_i) $$ 79 | 80 | 在这个公式中,$Y I$是从$\textbf Y$中随机选择的。注意,随机选择点对随机梯度下降的成功至关重要!如果不随机选取点,随机梯度下降可能比批量梯度下降产生更差的结果。 81 | 82 | 我们最常用的方法是随机梯度下降,通过改变数据点的排列顺序,使用每个点的排列顺序,直到完成一个完整的训练数据。如果算法没有收敛,我们就重新组合点,并运行另一个数据传递。随机梯度下降的每个**迭代**都会查看一个数据点;每个完整的数据传递都称为**epoch**。 83 | 84 | #### 使用 MSE 损耗[¶](#Using-the-MSE-Loss) 85 | 86 | 作为一个例子,我们推导了均方损失的随机梯度下降更新公式。回顾平均平方损失的定义: 87 | 88 | $$ \begin{aligned} L(\theta, \textbf{y}) &= \frac{1}{n} \sum_{i = 1}^{n}(y_i - \theta)^2 \end{aligned} $$ 89 | 90 | 考虑到$\theta$的梯度,我们有: 91 | 92 | $$ \begin{aligned} \nabla_{\theta} L(\theta, \textbf{y}) &= \frac{1}{n} \sum_{i = 1}^{n} -2(y_i - \theta) \end{aligned} $$ 93 | 94 | 因为上面的公式给出了数据集中所有点的平均梯度损失,所以单个点的梯度损失只是被平均的公式的一部分: 95 | 96 | $$ \begin{aligned} \nabla_{\theta} \ell(\theta, y_i) &= -2(y_i - \theta) \end{aligned} $$ 97 | 98 | 因此,MSE 损失的批梯度更新规则为: 99 | 100 | $$ \begin{aligned} {\theta}^{(t+1)} = \theta^{(t)} - \alpha \cdot \left( \frac{1}{n} \sum_{i = 1}^{n} -2(y_i - \theta) \right) \end{aligned} $$ 101 | 102 | 随机梯度更新规则为: 103 | 104 | $$ \begin{aligned} {\theta}^{(t+1)} = \theta^{(t)} - \alpha \cdot \left( -2(y_i - \theta) \right) \end{aligned} $$ 105 | 106 | ### 随机梯度下降行为 107 | 108 | 由于随机下降一次只检查一个数据点,因此它可能会比批梯度下降的更新更准确地更新$\theta$然而,由于随机梯度下降计算更新比批梯度下降快得多,随机梯度下降可以在批梯度下降完成单个更新时,朝着最优的$\theta$取得显著进展。 109 | 110 | 在下面的图片中,我们使用批梯度下降显示对$\theta$的连续更新。图中最暗的区域对应于我们训练数据中的最优值$\theta$,$\hat \theta$。 111 | 112 | (此图从技术上显示了一个具有两个参数的模型,但更重要的是,批梯度下降总是朝着$\hat \theta 的方向迈出一步。) 113 | 114 | ![](img/012e643b0a14c04165145874e8d2d6cd.jpg) 115 | 116 | 另一方面,随机梯度下降通常会从$\hat \theta$开始逐步下降!然而,由于它使更新更频繁,所以它通常比批梯度下降更快地收敛。 117 | 118 | ![](img/3fc7b32eb5869167179da3af2be3df36.jpg) 119 | 120 | ### 定义随机梯度下降函数 121 | 122 | 正如我们之前对批梯度下降所做的那样,我们定义了一个函数来计算损失函数的随机梯度下降。它将类似于我们的`minimize`函数,但我们需要在每次迭代中实现一个观测的随机选择。 123 | 124 | ``` 125 | def minimize_sgd(loss_fn, grad_loss_fn, dataset, alpha=0.2): 126 | """ 127 | Uses stochastic gradient descent to minimize loss_fn. 128 | Returns the minimizing value of theta once theta changes 129 | less than 0.001 between iterations. 130 | """ 131 | NUM_OBS = len(dataset) 132 | theta = 0 133 | np.random.shuffle(dataset) 134 | while True: 135 | for i in range(0, NUM_OBS, 1): 136 | rand_obs = dataset[i] 137 | gradient = grad_loss_fn(theta, rand_obs) 138 | new_theta = theta - alpha * gradient 139 | 140 | if abs(new_theta - theta) < 0.001: 141 | return new_theta 142 | 143 | theta = new_theta 144 | np.random.shuffle(dataset) 145 | 146 | ``` 147 | 148 | ### 小批量梯度下降 149 | 150 | **小批量梯度下降**通过增加我们在每次迭代中选择的观测次数,实现了批量梯度下降和随机梯度下降之间的平衡。在小批量梯度下降中,我们对每个梯度更新使用一些数据点,而不是单个点。 151 | 152 | 我们利用损失函数梯度的平均值来估计交叉熵损失的真实梯度。如果$\mathcal b$是我们从$n$观察值中随机抽样的一小批数据点,则以下近似值成立。 153 | 154 | $$ \nabla_\theta L(\theta, \textbf{y}) \approx \frac{1}{|\mathcal{B}|} \sum_{i\in\mathcal{B}}\nabla_{\theta}\ell(\theta, y_i) $$ 155 | 156 | 与随机梯度下降一样,我们通过改变训练数据的格式和通过迭代随机数据选择小批量来执行小批量梯度下降。在每个时代之后,我们重新洗牌我们的数据并选择新的小批量。 157 | 158 | 虽然我们已经在这本教科书中区分了随机和小批量梯度下降,但随机梯度下降有时被用作一个涵盖选择任何大小的小批量的总称。 159 | 160 | #### 选择小批量大小[¶](#Selecting-the-Mini-Batch-Size) 161 | 162 | 在某些计算机中的图形处理单元(GPU)芯片上运行时,最小批量梯度下降最为理想。由于这些硬件类型的计算可以并行执行,因此使用小批量可以在不增加计算时间的情况下提高梯度的精度。根据 GPU 的内存,小批量通常设置在 10 到 100 个观察值之间。 163 | 164 | ### 为小批量梯度下降定义函数 165 | 166 | 用于小批量梯度下降的函数要求能够选择批量大小。下面是实现此功能的函数。 167 | 168 | ``` 169 | def minimize_mini_batch(loss_fn, grad_loss_fn, dataset, minibatch_size, alpha=0.2): 170 | """ 171 | Uses mini-batch gradient descent to minimize loss_fn. 172 | Returns the minimizing value of theta once theta changes 173 | less than 0.001 between iterations. 174 | """ 175 | NUM_OBS = len(dataset) 176 | assert minibatch_size < NUM_OBS 177 | 178 | theta = 0 179 | np.random.shuffle(dataset) 180 | while True: 181 | for i in range(0, NUM_OBS, minibatch_size): 182 | mini_batch = dataset[i:i+minibatch_size] 183 | gradient = grad_loss_fn(theta, mini_batch) 184 | new_theta = theta - alpha * gradient 185 | 186 | if abs(new_theta - theta) < 0.001: 187 | return new_theta 188 | 189 | theta = new_theta 190 | np.random.shuffle(dataset) 191 | 192 | ``` 193 | 194 | ## 摘要[¶](#Summary) 195 | 196 | 我们使用批梯度下降迭代改进模型参数,直到模型达到最小损失。由于批量梯度下降是大数据集难以计算的问题,我们经常使用随机梯度下降来拟合模型。在使用 GPU 时,在相同的计算代价下,小批量梯度下降比随机梯度下降收敛得更快。对于大型数据集,随机梯度下降和小批量梯度下降通常比批量梯度下降更为可取,因为它们的计算速度更快。 -------------------------------------------------------------------------------- /docs/11.md: -------------------------------------------------------------------------------- 1 | # 梯度下降与数值优化 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/11/gradient_descence.html](https://www.bookbookmark.ds100.org/ch/11/gradient_descence.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/11')) 13 | 14 | ``` 15 | 16 | 为了使用数据集进行估计和预测,我们需要精确定义我们的模型并选择一个损失函数。例如,在 Tip Percentage 数据集中,我们的模型假设存在一个单独的 Tip 百分比,该百分比不会随表而变化。然后,我们决定使用均方误差损失函数,并找到最小化损失函数的模型。 17 | 18 | 我们还发现有一些简单的表达式可以最小化 MSE 和平均绝对误差损失函数:平均值和中位数。然而,随着我们的模型和损失函数变得更加复杂,我们将无法再为最小化损失的模型找到有用的代数表达式。例如,Huber 损耗具有有用的特性,但很难用手加以区分。 19 | 20 | 我们可以用计算机用梯度下降法来解决这个问题,这是一种最小化损失函数的计算方法。 -------------------------------------------------------------------------------- /docs/12.1.md: -------------------------------------------------------------------------------- 1 | # 随机变量 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/12/prob_random_vars.html](https://www.bookbookmark.ds100.org/ch/12/prob_random_vars.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/12')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | ``` 46 | # HIDDEN 47 | import scipy.stats as stats 48 | 49 | ``` 50 | 51 | 几乎所有现实世界中的现象都包含一定程度的随机性,使得数据生成和收集本身就是随机过程。由于我们将模型与这些数据相匹配,因此我们的模型也包含随机性。为了数学上表示这些随机过程,我们使用随机变量。 52 | 53 | **随机变量**是一个代数变量,表示由概率事件确定的**数值。在本书中,我们总是使用大写字母(不是希腊字母),如$X$或$Y$来表示随机变量。尽管随机变量可以代表离散的(如 10 人样本中男性的数量)或连续的数量(如洛杉矶的平均温度),但我们将仅在本教材中使用离散随机变量。** 54 | 55 | 我们必须总是指定一个给定的随机变量代表什么。例如,我们可以写下随机变量$x$表示 10 个硬币翻转中的头数。随机变量的定义决定了它可以接受的值。在本例中,$x$只能包含 0$到 10$之间的值。 56 | 57 | 我们还必须能够确定随机变量接受每个可能值的概率。例如,$x=0$被写为$p(x=0)=(0.5)^ 10$的概率,我们同样可以计算$x$是任何以$0,1,ldots,10 为单位的值的概率。 58 | 59 | ### 概率质量函数 60 | 61 | 随机变量$x$的**概率质量函数(pmf)**或**分布**提供$x$接受其每个可能值的概率。如果我们将$\mathbb x 设为$x$可以接受的一组值,并且$x$是$\mathbb x 中的特定值,则$x$的 PMF 必须满足以下规则: 62 | 63 | $$ 1) \sum_{x \in \mathbb{X}} P(X = x) = 1 $$$$ 2) \text{ For all } x \in \mathbb{X}, 0 \leq P(X = x) \leq 1 $$ 64 | 65 | 第一条规则规定,$x$sum 到$1$的所有可能值的概率。 66 | 67 | 第二条规则规定,给定值$x$的每个概率必须介于$0$和$1$之间。 68 | 69 | 假设我们让 x 美元代表一个公平的六面骰子的一个骰子的结果。我们知道,$x 在 1、2、3、4、5、6 中,$p(x=1)=p(x=2)=\ldots=p(x=6)=\frac 1 6 美元。我们可以绘制$x$的 PMF 作为概率分布: 70 | 71 | ``` 72 | # HIDDEN 73 | 74 | def plot_pmf(xs, probs, rv_name='X'): 75 | plt.plot(xs, probs, 'ro', ms=12, mec='b', color='b') 76 | plt.vlines(xs, 0, probs, colors='b', lw=4) 77 | plt.xlabel('$x$') 78 | plt.ylabel('$P(X = x)$') 79 | plt.ylim(0, 1) 80 | plt.title('PMF of $X$'); 81 | 82 | ``` 83 | 84 | ``` 85 | # HIDDEN 86 | xk = np.arange(1, 7) 87 | pk = (1/6, 1/6, 1/6, 1/6, 1/6, 1/6) 88 | 89 | plot_pmf(np.arange(1, 7), np.repeat(1/6, 6)) 90 | 91 | plt.yticks(np.linspace(0, 1, 7), 92 | ('0', r'$\frac{1}{6}$', r'$\frac{2}{6}$', r'$\frac{3}{6}$', 93 | r'$\frac{4}{6}$', r'$\frac{5}{6}$', '1')); 94 | 95 | ``` 96 | 97 | ![](img/ab3ba858f64515b244aaf4c65f86665b.jpg) 98 | 99 | ### 关节分布 100 | 101 | 单随机变量的 PMF 概念自然地扩展到多随机变量的联合分布。特别是,两个或多个随机变量的**联合分布**产生这些随机变量同时接受一组特定值的概率。 102 | 103 | 例如,让随机变量$X$表示 10 个硬币翻转中的头数,让$Y$表示同一组 10 个硬币翻转中的尾部数。我们可以注意到: 104 | 105 | $$P(X=0, Y=10) = P(X=10, Y=0) = (0.5)^{10}$$ 106 | 107 | 同时$P(x=6,y=6)=0 美元,因为我们不可能在 10 个硬币翻转中有 6 个头部和 6 个尾部。 108 | 109 | #### 边际分布 110 | 111 | 有时,我们从两个随机变量$X$和$Y$的联合分布开始,但只想找到$X$的分布。这个分布称为**边际分布**。为了找出$x$接受某个特定值的概率,我们必须考虑所有可能的$y$值(用$\mathbb y 表示),这些值可以与$x$同时发生,并对所有这些联合概率求和: 112 | 113 | $$ \begin{aligned} \sum_{y \in \mathbb{Y}} P(X=x, Y=y) &= P(X=x) \end{aligned} $$ 114 | 115 | 我们可以证明如下身份: 116 | 117 | $$ \begin{aligned} \sum_{y \in \mathbb{Y}} P(X=x, Y=y) &= \sum_{y \in \mathbb{Y}} P(X=x) \times P(Y=y \; \vert \; X=x)\\ &= P(X=x) \times \sum_{y \in \mathbb{Y}} P(Y=y \; \vert \; X=x)\\ &= P(X=x) \times 1 \\ &= P(X=x) \end{aligned} $$ 118 | 119 | 在这个证明的最后一行中,我们将$y\;\vert\;x=x$作为一个带有未知 pmf 的随机变量。这一点很重要,因为我们使用了一个属性,即 pmf 中的概率总和为 1 美元,这意味着在 mathbb y p(y=y \ vert \ x=x)=1 美元。 120 | 121 | #### 独立随机变量 122 | 123 | 像事件一样,两个随机变量可以是相依的或独立的。任何两个随机变量都是独立的,只要知道一个变量的结果不会改变观察另一个变量任何结果的概率。 124 | 125 | 例如,假设我们把一枚硬币掷十次,让$x$作为头的数目,让$y$作为尾的数目。显然,$x$和$y$是因变量,因为知道$x=0$意味着$y$必须等于$10$。如果我们没有观察到$X$的值,$Y$可以以非零概率在$0$和$10$之间取任何值。 126 | 127 | 我们可以做两组十次翻转。如果$x$是第一组翻转中的头数,$y$是第二组翻转中的头数,$x$和$y$是独立的,因为第一组十个翻转的结果不会影响第二组翻转的结果。 128 | 129 | ### 年龄[¶](#An-Example-with-Ages)的例子 130 | 131 | 假设我们有一个由四个人组成的小数据集: 132 | 133 | ``` 134 | # HIDDEN 135 | data={"Name":["Carol","Bob","John","Dave"], 'Age': [50,52,51,50]} 136 | people = pd.DataFrame(data) 137 | people 138 | 139 | ``` 140 | 141 | | | 姓名 | 年龄 | 142 | | --- | --- | --- | 143 | | 零 | 颂歌 | 五十 | 144 | | --- | --- | --- | 145 | | 1 个 | 鲍勃 | 五十二 | 146 | | --- | --- | --- | 147 | | 二 | 约翰 | 五十一 | 148 | | --- | --- | --- | 149 | | 三 | 戴夫 | 50 | 150 | | --- | --- | --- | 151 | 152 | 假设我们从这个数据集中抽取两个人进行替换。如果随机变量$Z$代表样本中第一和第二个人的年龄差异,那么$Z$的 PMF 是什么? 153 | 154 | 为了解决这个问题,我们定义了两个新的随机变量。我们将$X$定义为第一个人的年龄,$Y$定义为第二个人的年龄。那么,$Z=X-Y$就可以了。然后,我们找到 x$和 y$的联合概率分布:x$和 y$可以同时接受的每个值的概率。在这种情况下,请注意$x$和$y$是独立的,分布相同;这两个随机变量表示来自同一数据集的两个独立的提取,第一个提取对第二个提取没有影响。例如,$x=51$和$y=50$的概率是$p(x=51,y=50)=\frac 1 4 \cdot\frac 2 4 frac 2 16。以类似的方式,我们得到: 155 | 156 | | | Y=50 美元 | Y=51 美元 | Y=52 美元 | 157 | | --- | --- | --- | --- | 158 | | X=50 美元 | 4/16 | 2/16 | 2/16 | 159 | | X=51 美元 | 2/16 | 1/16 | 1/16 | 160 | | X=52 美元 | 2/16 | 1/16 | 1/16 | 161 | 162 | 现在让我们考虑一下这样的情况:我们从上面相同的数据集中抽取两个人,但没有替换。如前所述,我们将$X$定义为第一个人的年龄,$Y$定义为第二个人的年龄,$Z=X-Y$。但是,现在$X$和$Y$不是独立的;例如,如果我们知道$X=51$,那么$Y\neq 51$。我们发现 X 美元和 Y 美元的联合分配如下: 163 | 164 | | | $Y=50$ | $Y=51$ | $Y=52$ | 165 | | --- | --- | --- | --- | 166 | | $X=50$ | 2/12 | 2/12 | 2/12 | 167 | | $X=51$ | 2/12 | 零 | 1/12 | 168 | | $X=52$ | 2/12 | 1/12 | 0 | 169 | 170 | 我们还可以从表中找到$Y$的边际分布。 171 | 172 | $$ \begin{aligned} P(Y = 50) &= P(Y = 50, X = 50) + P(Y = 50, X = 51) + P(Y = 50, X = 52) \\ &= \frac{2}{12} + \frac{2}{12} + \frac{2}{12} \\ &= \frac{1}{2} \\ P(Y = 51) &= \frac{2}{12} + 0 + \frac{1}{12} = \frac{1}{4} \\ P(Y = 52) &= \frac{2}{12} + \frac{1}{12} + 0 = \frac{1}{4} \end{aligned} $$ 173 | 174 | 注意,我们对上面的联合分布表的每一列进行了汇总。我们可以想象计算每一列的总和,并将结果写在下表的空白处;这是术语边际分布的起源。 175 | 176 | 您还应该注意到,$X$和$Y$在没有替换的情况下采样时是不独立的。例如,如果 x=52 美元,$y\neq 52 美元。然而,$x$和$y$的边际分布仍然相同。 177 | 178 | ## 摘要[¶](#Summary) 179 | 180 | 在本节中,我们将介绍随机变量,即根据随机过程获取值的数学变量。这些结果必须完全准确地定义,每个结果都必须有明确的发生概率。随机变量可以用来表示许多随机现象,包括数据收集过程。 -------------------------------------------------------------------------------- /docs/12.3.md: -------------------------------------------------------------------------------- 1 | # 风险 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/12/prob_risk.html](https://www.textbook.ds100.org/ch/12/prob_risk.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/12')) 13 | 14 | ``` 15 | 16 | 在上一章介绍的建模场景中,服务生收集了特定月份工作的提示数据集。我们选择了一个常数模型,并最小化了该数据集上的均方误差(mse)损失函数,确保我们的常数模型在该数据集和损失函数上优于所有其他常数模型。常量模型只有一个参数,$\theta$。我们发现优化参数$\hat \theta=\text mean(\textbf y)$用于 MSE 损失。 17 | 18 | 虽然这样的模型对训练数据做出了相对准确的预测,但我们想知道这个模型在来自人群的新数据上是否会表现良好。为了表示这个概念,我们引入了统计**风险**,也称为**预期损失**。 19 | 20 | ### 定义[¶](#Definition) 21 | 22 | 模型的风险是从人群中随机选择的点上模型损失的预期值。 23 | 24 | 在这种情况下,总人数包括我们的服务员在工作期间收到的所有小费百分比,包括未来的小费。我们使用随机变量$x$表示从总体中随机选择的提示百分比,而通常变量$theta$表示常量模型的预测。使用这个符号,我们模型的风险$r(\theta)$是: 25 | 26 | $$ \begin{aligned} R(\theta) = \mathbb{E}\left[(X - \theta)^2\right] \end{aligned} $$ 27 | 28 | 在上面的表达式中,我们使用 MSE 损失,它给出期望值中的内部$(x-\theta)^2$。风险是$\theta$的函数,因为我们可以根据需要更改$\theta$。 29 | 30 | 与单纯的损失不同,使用风险可以让我们推断模型对总体人口的准确性。如果我们的模型达到一个低风险,我们的模型将作出准确的预测点从人口长期。另一方面,如果我们的模型具有很高的风险,那么一般来说,它在来自人群的数据上表现不佳。 31 | 32 | 当然,我们希望选择能使模型的风险尽可能低的$theta$值。我们使用变量$\theta^*$来表示风险最小化值$\theta$或人口的最佳模型参数。为了澄清,$\theta^*$表示风险最小化的模型参数,而$\hat \theta$表示数据集特定损失最小化的参数。 33 | 34 | ### 最小化风险 35 | 36 | 让我们找一个能将风险降到最低的价值为\theta$以前,我们用微积分来实现这个最小化。这一次,我们将使用一个产生有意义的最终表达式的数学技巧。我们将$x-\theta$替换为$x-\mathbb e[x]+\mathbb e[x]-\theta$并展开: 37 | 38 | $$ \begin{aligned} R(\theta) &= \mathbb{E}[(X - \theta)^2] \\ &= \mathbb{E}\left[ (X - \mathbb{E}[X] + \mathbb{E}[X] - \theta)^2 \right] \\ &= \mathbb{E}\left[ \bigl( (X - \mathbb{E}[X]) + (\mathbb{E}[X] - \theta) \bigr)^2 \right] \\ &= \mathbb{E}\left[ (X - \mathbb{E}[X])^2 + 2(X - \mathbb{E}[X])(\mathbb{E}[X] - \theta) + (\mathbb{E}[X]- \theta)^2 \right] \\ \end{aligned} $$ 39 | 40 | 现在,我们应用期望的线性并简化。我们使用标识$\mathbb e \ left[(x-\mathbb e[x])\right]=0$这大致相当于说明$\mathbb e[x]位于$x$的分布中心。 41 | 42 | $$ \begin{aligned} R(\theta) &= \mathbb{E}\left[ (X - \mathbb{E}[X])^2 \right] + \mathbb{E}\left[ 2(X - \mathbb{E}[X])(\mathbb{E}[X] - \theta) \right] + \mathbb{E}\left[ (\mathbb{E}[X]- \theta)^2 \right] \\ &= \mathbb{E}\left[ (X - \mathbb{E}[X])^2 \right] + 2 (\mathbb{E}[X] - \theta) \underbrace{ \mathbb{E}\left[ (X - \mathbb{E}[X]) \right]}_{= 0} + (\mathbb{E}[X]- \theta)^2 \\ &= \mathbb{E}\left[ (X - \mathbb{E}[X])^2 \right] + 0 + (\mathbb{E}[X]- \theta)^2 \\ R(\theta) &= \mathbb{E}\left[ (X - \mathbb{E}[X])^2 \right] + (\mathbb{E}[X]- \theta)^2 \\ \end{aligned} $$ 43 | 44 | 注意,上面表达式中的第一个术语是$x$,$var(x)$的**方差**,它不依赖于$\theta$。第二个术语给出了$\theta$与$\mathbb e[x]$的接近程度。因此,第二个术语被称为我们模型的**偏差**。换句话说,模型的风险是模型的偏差加上我们试图预测的数量的方差: 45 | 46 | $$ \begin{aligned} R(\theta) &= \underbrace{(\mathbb{E}[X]- \theta)^2}_\text{bias} + \underbrace{Var(X)}_\text{variance} \end{aligned} $$ 47 | 48 | 因此,当我们的模型没有偏差时,风险最小化:$\theta^*=\mathbb e[x]$。 49 | 50 | #### 风险分析 51 | 52 | 注意,当我们的模型没有偏差时,风险通常是正的。这意味着即使是一个最优模型也会有预测误差。直观地说,这是因为一个常量模型只能预测一个数字,而$x$可能会从总体中获取任何值。方差项捕获误差的大小。低方差意味着$x$可能取接近于$theta$的值,而高方差意味着$x$更可能取远离$theta$的值。 53 | 54 | ### 经验风险最小化 55 | 56 | 根据以上分析,我们希望设置$\theta=\mathbb e[x]$。不幸的是,计算$\mathbb e[x]$需要完整的人口知识。要了解原因,请检查$\mathbb e[x]$的表达式: 57 | 58 | $$ \begin{aligned} \mathbb{E}[X] = \sum_{x \in \mathbb{X}} x \cdot P(X = x) \end{aligned} $$ 59 | 60 | $P(x=x)$表示$X$从总体上接受特定值的概率。然而,要计算这个概率,我们需要知道 x$的所有可能值以及它们在人群中出现的频率。换句话说,为了将模型对人口的风险降到最低,我们需要访问人口。 61 | 62 | 我们可以通过记住一个大的随机样本中的值的分布将接近人口中的值的分布来解决这个问题。如果我们的样本是真的,我们可以将样本视为种群本身。 63 | 64 | 假设我们从样本中随机抽取点,而不是人口。由于样本$\mathbf x=x 1,x 2,ldots,x n$中有$N$总点数,因此每个点$X i$都有出现的概率$\frac 1 n。现在我们可以为$\mathbb e[x]$创建近似值: 65 | 66 | $$ \begin{aligned} \mathbb{E}[X] &\approx \frac{1}{n} \sum_{i=1}^n x_i = \text{mean}({\mathbf{x}}) \end{aligned} $$ 67 | 68 | 因此,使用随机样本中捕获的信息,我们对$\theta^*$的最佳估计是$\hat \theta=\text mean(\mathbf x)$。我们说,$\hat \theta$minimized the**experimental risk**,the risk calculated using the sample as a stand in for the population. 69 | 70 | #### 随机抽样的重要性 71 | 72 | 在上述近似中,必须注意随机抽样的重要性。如果我们的样本是非随机的,我们不能假设样本的分布与人群的分布相似。使用非随机样本估计$\theta^*$通常会导致有偏估计和更高的风险。 73 | 74 | #### 损失最小化连接 75 | 76 | 回想一下,我们之前显示的$\Hat \Theta=\Text Mean(\MathBF X)$将数据集上的 MSE 损失最小化。现在,我们迈出了有意义的一步。如果我们的培训数据是随机样本,那么$\hat \theta=\text mean(\mathbf x)$不仅为其培训数据生成最佳模型,而且根据我们样本中的信息为总体生成最佳模型。 77 | 78 | ## 摘要[¶](#Summary) 79 | 80 | 使用本章中开发的数学工具,我们了解了模型在总体上的性能。如果模型将统计风险(htg1)降到最低,它就可以做出准确的预测。我们发现全局最优模型参数为: 81 | 82 | $$ \begin{aligned} \theta^* = \mathbb{E}[X] \end{aligned} $$ 83 | 84 | 由于我们不能很容易地计算出这一点,因此我们找到了最小化**经验风险**的模型参数。 85 | 86 | $$ \begin{aligned} \hat \theta = \text{mean}(\mathbf x) \end{aligned} $$ 87 | 88 | 如果训练数据是从人群中随机抽样的,那么$\hat \theta \约\theta ^*$。因此,一个对大量随机样本进行训练的常量模型也很可能在人群中表现良好。 -------------------------------------------------------------------------------- /docs/12.md: -------------------------------------------------------------------------------- 1 | # 概率与泛化 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/12/prob_and_gen.html](https://www.bookbookmark.ds100.org/ch/12/prob_and_gen.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/12')) 13 | 14 | ``` 15 | 16 | 我们介绍了一系列使用数据集创建模型的步骤: 17 | 18 | 1. 选择一个模型。 19 | 2. 选择损失函数。 20 | 3. 通过最小化数据集上的损失来适应模型。 21 | 22 | 到目前为止,我们引入了常数模型(1)、一组损失函数(2)和梯度下降作为最小化损失(3)的一般方法。遵循这些步骤通常会生成一个模型,对它所训练的数据集进行精确预测。 23 | 24 | 不幸的是,一个只在训练数据上表现良好的模型几乎没有实际的实用性。我们关心模型对**归纳**的能力。我们的模型应该对人口做出准确的预测,而不仅仅是训练数据。这个问题似乎很难回答我们如何解释尚未看到的数据? 25 | 26 | 这里我们来看看统计的推论能力。我们首先介绍一些数学工具:随机变量、期望和方差。使用这些工具,我们可以根据我们的人口数据,甚至是我们没有用来训练模型的数据,得出关于模型长期性能的结论! -------------------------------------------------------------------------------- /docs/13.1.md: -------------------------------------------------------------------------------- 1 | # 预测小费金额 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/13/linear_tips.html](https://www.bookbookmark.ds100.org/ch/13/linear_tips.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/13')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | 以前,我们使用一个数据集,该数据集包含一个服务生一周内提供的每个表的一行。我们的服务员收集了这些数据,以便预测他将来从一张桌子上能收到的小费金额。 46 | 47 | ``` 48 | tips = sns.load_dataset('tips') 49 | tips.head() 50 | 51 | ``` 52 | 53 | | | 账单合计 | 提示 | 性别 | 吸烟者 | 白天 | 时间 | 大小 | 54 | | --- | --- | --- | --- | --- | --- | --- | --- | 55 | | 零 | 十六点九九 | 1.01 年 | 女性 | 不 | 太阳 | 晚餐 | 二 | 56 | | --- | --- | --- | --- | --- | --- | --- | --- | 57 | | 1 个 | 十点三四 | 一点六六 | 男性 | No | Sun | Dinner | 三 | 58 | | --- | --- | --- | --- | --- | --- | --- | --- | 59 | | 二 | 二十一点零一 | 3.50 美元 | Male | No | Sun | Dinner | 3 | 60 | | --- | --- | --- | --- | --- | --- | --- | --- | 61 | | 三 | 二十三点六八 | 三点三一 | Male | No | Sun | Dinner | 2 | 62 | | --- | --- | --- | --- | --- | --- | --- | --- | 63 | | 四 | 二十四点五九 | 三点六一 | Female | No | Sun | Dinner | 四 | 64 | | --- | --- | --- | --- | --- | --- | --- | --- | 65 | 66 | ``` 67 | sns.distplot(tips['tip'], bins=25); 68 | 69 | ``` 70 | 71 | ![](img/36725c695b1ecae996ff2107282cd111.jpg) 72 | 73 | 如前所述,如果我们选择一个常数模型和均方误差成本,我们的模型将预测尖端数量的平均值: 74 | 75 | ``` 76 | np.mean(tips['tip']) 77 | 78 | ``` 79 | 80 | ``` 81 | 2.9982786885245902 82 | ``` 83 | 84 | 这意味着,如果一个新的聚会点了一顿饭,服务员问我们他可能会收到多少小费,我们会说“大约 3 美元”,不管桌子有多大,或者他们的总帐单有多少。 85 | 86 | 然而,观察数据集中的其他变量,我们发现如果我们将它们合并到我们的模型中,我们可能能够做出更准确的预测。例如,下面的小费金额与总账单的图表显示了一个正关联。 87 | 88 | ``` 89 | # HIDDEN 90 | sns.lmplot(x='total_bill', y='tip', data=tips, fit_reg=False) 91 | plt.title('Tip amount vs. Total Bill') 92 | plt.xlabel('Total Bill') 93 | plt.ylabel('Tip Amount'); 94 | 95 | ``` 96 | 97 | ![](img/7e4290636eac64cb2717852692dc891a.jpg) 98 | 99 | 虽然小费的平均金额是 3 美元,但如果一张桌子订购价值 40 美元的食物,我们肯定会期望服务员收到超过 3 美元的小费。因此,我们希望改变我们的模型,使其基于数据集中的变量进行预测,而不是盲目地预测平均尖端量。为此,我们使用线性模型而不是常量模型。 100 | 101 | 让我们简要回顾一下我们当前的建模和估计工具箱,并定义一些新的表示法,以便更好地表示线性模型所具有的额外复杂性。 102 | 103 | ## 定义简单线性模型 104 | 105 | 我们有兴趣根据一张表的总帐单来预测小费金额。让$Y$代表小费金额,这是我们试图预测的变量。让$x$代表总账单,我们将其合并用于预测的变量。 106 | 107 | 我们定义了一个线性模型$f_ \boldSymbol\theta^*$依赖于$x$: 108 | 109 | $$ f_\boldsymbol\theta^* (x) = \theta_1^* x + \theta_0^* $$ 110 | 111 | 我们将$f_u \boldsymbol\theta^*(x)$作为生成数据的基础函数。 112 | 113 | $F_u \boldsymbol\theta^*(x)$假设实际上,$Y$与$X$具有完全线性关系。然而,由于一些随机噪声,我们的观测数据并没有完全沿着直线移动。在数学上,我们通过添加一个噪声项来解释这一点: 114 | 115 | $$ y = f_\boldsymbol\theta^* (x) + \epsilon $$ 116 | 117 | 如果假设$Y$与$X$的关系是完全线性的,并且我们能够以某种方式找到$\theta_1^*$和$\theta_0^*$的精确值,并且我们神奇地没有随机噪声,那么我们就能够完美地预测服务员为所有桌子得到的小费的数量,永远。当然,在实践中我们不能完全满足这些标准中的任何一个。相反,我们将使用我们的数据集来估计$\theta_1^*$和$\theta_0^*$以使我们的预测尽可能准确。 118 | 119 | ### 线性模型估计 120 | 121 | 由于我们找不到确切的$\Theta_1^*$和$\Theta_0^*$数据,因此我们假设数据集近似于我们的总体,并使用数据集来估计这些参数。我们用$\theta_$和$\theta_$表示我们的估计,用$\hat \theta_ 和$\hat \theta_ 表示我们的拟合估计,我们的模型为: 122 | 123 | $$ f_\boldsymbol\theta (x) = \theta_1 x + \theta_0 $$ 124 | 125 | 有时,您会看到$H(x)$而不是$F \BoldSymbol\Theta(x)$的书写,$H$代表假设,因为$F \BoldSymbol\Theta(x)$是我们对$F \BoldSymbol\Theta ^*(x)$的假设。 126 | 127 | 为了确定$\hat \theta 1 和$\hat \theta 0 美元,我们选择了一个成本函数,并使用梯度下降将其最小化。 -------------------------------------------------------------------------------- /docs/13.md: -------------------------------------------------------------------------------- 1 | # 线性模型 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/13/linear_models.html](https://www.bookbookmark.ds100.org/ch/13/linear_models.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/13')) 13 | 14 | ``` 15 | 16 | 既然我们有了将模型拟合到成本函数的一般方法,那么我们就将注意力转向模型的改进。为了简单起见,我们以前把自己局限于一个常量模型:我们的模型只预测一个数字。 17 | 18 | 然而,给我们的服务生这样一个模特,他很难满足。他可能会指出,他收集了更多关于他的桌子的信息,而不仅仅是小费百分比。为什么我们不使用他的其他数据,例如表的大小或总帐单,以使我们的模型更有用? 19 | 20 | 在本章中,我们将介绍线性模型,它将允许我们利用整个数据集进行预测。线性模型不仅在实践中得到广泛应用,而且具有丰富的理论基础,使我们能够理解未来的建模工具。我们引入了一个简单的线性回归模型,它使用一个解释变量,解释了如何使用梯度下降来拟合模型,最后将模型扩展为包含多个解释变量。 -------------------------------------------------------------------------------- /docs/14.md: -------------------------------------------------------------------------------- 1 | # 特征工程 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/14/feature_engineering.html](https://www.textbook.ds100.org/ch/14/feature_engineering.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/14')) 13 | 14 | ``` 15 | 16 | 特征工程指的是为数据集本身创建和添加新特征,以增加模型的复杂性的实践。 17 | 18 | 到目前为止,我们只使用数字特征作为输入进行线性回归,我们使用(数字)总账单来预测小费金额。然而,tip 数据集也包含分类数据,例如星期几和用餐类型。特征工程允许我们将分类变量转换为数值特征进行线性回归。 19 | 20 | 特征工程还允许我们通过在数据集中创建新变量来使用线性回归模型进行多项式回归。 -------------------------------------------------------------------------------- /docs/15.1.md: -------------------------------------------------------------------------------- 1 | # 风险和损失最小化 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/15/bias_risk.html](https://www.textbook.ds100.org/ch/15/bias_risk.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/15')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | ``` 46 | # HIDDEN 47 | def df_interact(df, nrows=7, ncols=7): 48 | ''' 49 | Outputs sliders that show rows and columns of df 50 | ''' 51 | def peek(row=0, col=0): 52 | return df.iloc[row:row + nrows, col:col + ncols] 53 | if len(df.columns) <= ncols: 54 | interact(peek, row=(0, len(df) - nrows, nrows), col=fixed(0)) 55 | else: 56 | interact(peek, 57 | row=(0, len(df) - nrows, nrows), 58 | col=(0, len(df.columns) - ncols)) 59 | print('({} rows, {} columns) total'.format(df.shape[0], df.shape[1])) 60 | 61 | ``` 62 | 63 | 为了使用数据进行预测,我们定义了一个模型,在整个数据集中选择一个损失函数,并通过最小化损失来拟合模型的参数。例如,为了进行最小二乘线性回归,我们选择模型: 64 | 65 | $$ \begin{aligned} f_\hat{\theta} (x) &= \hat{\theta} \cdot x \end{aligned} $$ 66 | 67 | 损失函数: 68 | 69 | $$ \begin{aligned} L(\hat{\theta}, X, y) &= \frac{1}{n} \sum_{i}(y_i - f_\hat{\theta} (X_i))^2\\ \end{aligned} $$ 70 | 71 | 和以前一样,我们使用$\hat \theta$作为模型参数的向量,$x$作为包含一行数据矩阵的向量,$x$和$y$作为观测值的向量进行预测。$X$I$是$X$的第$I$行,$Y$I$是 Y 的第$I$项。 72 | 73 | 注意,我们在数据集中丢失的函数是每行数据的丢失函数值的平均值。如果我们定义平方损失函数: 74 | 75 | $$ \begin{aligned} \ell(y_i, f_\hat{\theta} (x)) &= (y_i - f_\hat{\theta} (x))^2 \end{aligned} $$ 76 | 77 | 然后我们可以更简单地重写平均损失函数: 78 | 79 | $$ \begin{aligned} L(\hat{\theta}, X, y) &= \frac{1}{n} \sum_{i} \ell(y_i, f_\hat{\theta} (X_i)) \end{aligned} $$ 80 | 81 | 上面的表达式抽象了特定的损失函数;不管我们选择什么损失函数,我们的整体损失都是平均损失。 82 | 83 | 通过最小化平均损失,我们选择最适合我们观测数据集的模型参数。到目前为止,我们已经避免对生成数据集的总体进行陈述。然而,在现实中,我们非常有兴趣对整个人口做出良好的预测,而不仅仅是我们已经看到的数据。 84 | 85 | ## 风险[¶](#Risk) 86 | 87 | 如果我们的观测数据集$X$和$Y$是从给定的人群中随机抽取的,那么我们的观测数据就是随机变量。如果我们观察到的数据是随机变量,我们的模型参数也是随机变量,每次我们收集一组新的数据并拟合一个模型时,模型$f_ \hat \theta(x)$的参数将略有不同。 88 | 89 | 假设我们从人群中随机抽取一对输入输出对$Z、\gamma$。我们的模型在这个值上产生的损失是: 90 | 91 | $$ \begin{aligned} \ell(\gamma, f_\hat{\theta} (z)) \end{aligned} $$ 92 | 93 | 请注意,这个损失是一个随机变量;不同的观测数据集$X$和$Y$以及来自我们的人口的不同点$Z、\gamma$的损失都会发生变化。 94 | 95 | 模型$F \Theta 的**风险**是上述所有训练数据$X$、$Y$和所有点$Z$、$Gamma$在人群中的预期损失值: 96 | 97 | $$ \begin{aligned} R(f_\hat{\theta}(x)) = \mathbb{E}[ \ell(\gamma, f_\hat{\theta} (z)) ] \end{aligned} $$ 98 | 99 | 请注意,风险是对随机变量的期望,因此 _ 不是 _ 随机本身。公平的六面模具辊的预期值为 3.5,即使辊本身是随机的。 100 | 101 | 上面的风险有时被称为**真正的风险**,因为它说明了一个模型在整个人群中的作用。如果我们能够计算出所有模型的真实风险,我们就可以简单地选择风险最小的模型,并确定在我们选择损失函数时,模型的长期性能将优于所有其他模型。 102 | 103 | ## 经验风险 104 | 105 | 然而,现实并非如此善良。如果我们将期望的定义代入真实风险的公式,我们得到: 106 | 107 | $$ \begin{aligned} R(f_\hat{\theta}) &= \mathbb{E}[ \ell(\gamma, f_\hat{\theta} (z)) ] \\ &= \sum_\gamma \sum_z \ell(\gamma, f_\hat{\theta} (z)) P(\gamma, z) \\ \end{aligned} $$ 108 | 109 | 为了进一步简化这个表达式,我们需要知道$P(\gamma,z)$,观察人口中任何点的全局概率分布。不幸的是,这并不容易。假设我们正试图根据表的大小预测提示量。一张三人桌给 14.50 美元小费的概率是多少?如果我们准确地知道点的分布,我们就不必收集数据或拟合模型,我们就已经知道任何给定表的最大可能提示量。 110 | 111 | 虽然我们不知道人口的确切分布,但是我们可以使用观测数据集$X$和$Y$来近似它。如果从我们的人口中随机抽取$X$和$Y$点,则$X$和$Y$点的分布与人口分布类似。因此,我们将 x 美元和 y 美元视为我们的人口。然后,任何输入输出对$x_i$,$y_i$出现的概率是$\frac 1 n,因为每对输入输出对在$n$积分总数中出现一次。 112 | 113 | 这允许我们计算**经验风险**,这是真实风险的近似值: 114 | 115 | $$ \begin{aligned} \hat R(f_\hat{\theta}) &= \mathbb{E}[ \ell(y_i, f_\hat{\theta} (X_i)) ] \\ &= \sum_{i=1}^n \ell(y_i, f_\hat{\theta} (X_i)) \frac{1}{n} \\ &= \frac{1}{n} \sum_{i=1}^n \ell(y_i, f_\hat{\theta} (X_i)) \end{aligned} $$ 116 | 117 | 如果我们的数据集很大,并且数据是随机从人群中提取的,那么经验风险$\hat R(f \theta)$接近真实风险$R(f \hat \theta)$。这使我们能够选择最小化经验风险的模型。 118 | 119 | 请注意,此表达式是节开头的平均损失函数!通过最小化平均损失,我们也可以最小化经验风险。这解释了为什么我们经常使用平均损失作为我们的整体损失函数,而不是最大损失,例如。 120 | 121 | ## 摘要[¶](#Summary) 122 | 123 | 预测模型的真实风险描述了模型将为人口带来的总体长期损失。由于我们通常不能直接计算真实风险,因此我们计算的是经验风险,并使用经验风险找到一个合适的预测模型。由于经验风险是观测数据集上的平均损失,因此在拟合模型时,我们通常将平均损失最小化。 -------------------------------------------------------------------------------- /docs/15.md: -------------------------------------------------------------------------------- 1 | # 偏方差权衡 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/15/bias_intro.html](https://www.textbook.ds100.org/ch/15/bias_intro.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/15')) 13 | 14 | ``` 15 | 16 | 有时,我们选择的模型过于简单,无法表示底层数据生成过程。其他时候,我们选择的模型过于复杂,它与数据中的噪声相匹配,而不是数据的整体模式。 17 | 18 | 为了理解发生这种情况的原因,我们使用概率和统计工具分析我们的模型。这些工具允许我们在描述建模中的基本现象的几个孤立的例子之外进行归纳。特别是,我们将使用期望和方差工具来揭示偏差-方差权衡。 -------------------------------------------------------------------------------- /docs/16.1.md: -------------------------------------------------------------------------------- 1 | # 正则化直觉 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/16/reg_invituation.html](https://www.textbook.ds100.org/ch/16/reg_invituation.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/16')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | ``` 46 | # HIDDEN 47 | def df_interact(df, nrows=7, ncols=7): 48 | ''' 49 | Outputs sliders that show rows and columns of df 50 | ''' 51 | def peek(row=0, col=0): 52 | return df.iloc[row:row + nrows, col:col + ncols] 53 | if len(df.columns) <= ncols: 54 | interact(peek, row=(0, len(df) - nrows, nrows), col=fixed(0)) 55 | else: 56 | interact(peek, 57 | row=(0, len(df) - nrows, nrows), 58 | col=(0, len(df.columns) - ncols)) 59 | print('({} rows, {} columns) total'.format(df.shape[0], df.shape[1])) 60 | 61 | ``` 62 | 63 | ``` 64 | # HIDDEN 65 | df = pd.read_csv('water_large.csv') 66 | 67 | ``` 68 | 69 | ``` 70 | # HIDDEN 71 | from collections import namedtuple 72 | Curve = namedtuple('Curve', ['xs', 'ys']) 73 | 74 | def flatten(seq): return [item for subseq in seq for item in subseq] 75 | 76 | def make_curve(clf, x_start=-50, x_end=50): 77 | xs = np.linspace(x_start, x_end, num=100) 78 | ys = clf.predict(xs.reshape(-1, 1)) 79 | return Curve(xs, ys) 80 | 81 | def plot_data(df=df, ax=plt, **kwargs): 82 | ax.scatter(df.iloc[:, 0], df.iloc[:, 1], s=50, **kwargs) 83 | 84 | def plot_curve(curve, ax=plt, **kwargs): 85 | ax.plot(curve.xs, curve.ys, **kwargs) 86 | 87 | def plot_curves(curves, cols=2): 88 | rows = int(np.ceil(len(curves) / cols)) 89 | fig, axes = plt.subplots(rows, cols, figsize=(10, 8), 90 | sharex=True, sharey=True) 91 | for ax, curve, deg in zip(flatten(axes), curves, degrees): 92 | plot_data(ax=ax, label='Training data') 93 | plot_curve(curve, ax=ax, label=f'Deg {deg} poly') 94 | ax.set_ylim(-5e10, 170e10) 95 | ax.legend() 96 | 97 | # add a big axes, hide frame 98 | fig.add_subplot(111, frameon=False) 99 | # hide tick and tick label of the big axes 100 | plt.tick_params(labelcolor='none', top='off', bottom='off', 101 | left='off', right='off') 102 | plt.grid(False) 103 | plt.title('Polynomial Regression') 104 | plt.xlabel('Water Level Change (m)') 105 | plt.ylabel('Water Flow (Liters)') 106 | plt.tight_layout() 107 | 108 | def print_coef(clf): 109 | reg = clf.named_steps['reg'] 110 | print(reg.intercept_) 111 | print(reg.coef_) 112 | 113 | ``` 114 | 115 | ``` 116 | # HIDDEN 117 | X = df.iloc[:, [0]].as_matrix() 118 | y = df.iloc[:, 1].as_matrix() 119 | 120 | degrees = [1, 2, 8, 12] 121 | clfs = [Pipeline([('poly', PolynomialFeatures(degree=deg, include_bias=False)), 122 | ('reg', LinearRegression())]) 123 | .fit(X, y) 124 | for deg in degrees] 125 | 126 | curves = [make_curve(clf) for clf in clfs] 127 | 128 | ridge_clfs = [Pipeline([('poly', PolynomialFeatures(degree=deg, include_bias=False)), 129 | ('reg', Ridge(alpha=0.1, normalize=True))]) 130 | .fit(X, y) 131 | for deg in degrees] 132 | 133 | ridge_curves = [make_curve(clf) for clf in ridge_clfs] 134 | 135 | ``` 136 | 137 | 我们从一个例子开始讨论正则化,这个例子说明了正则化的重要性。 138 | 139 | ## 大坝数据 140 | 141 | 以下数据集以升为单位记录某一天从大坝流出的水量,以米为单位记录该天水位的变化量。 142 | 143 | ``` 144 | # HIDDEN 145 | df 146 | 147 | ``` 148 | 149 | | | 水位变化 | 水流 | 150 | | --- | --- | --- | 151 | | 零 | -15.936758 | 6.042233E+10 号 | 152 | | --- | --- | --- | 153 | | 1 个 | -29.152979 年 | 3.321490E+10 型 | 154 | | --- | --- | --- | 155 | | 二 | 36.189549 年 | 9.727064E+11 号 | 156 | | --- | --- | --- | 157 | | …… | …… | ... | 158 | | --- | --- | --- | 159 | | 20 个 | 7.085480 | 2.363520E+11 号 | 160 | | --- | --- | --- | 161 | | 21 岁 | 46.282369 年 | 1.494256E+12 | 162 | | --- | --- | --- | 163 | | 二十二 | 14.612289 年 | 3.781463E+11 号 | 164 | | --- | --- | --- | 165 | 166 | 23 行×2 列 167 | 168 | 绘制这些数据表明,随着水位变得更为积极,水流呈上升趋势。 169 | 170 | ``` 171 | # HIDDEN 172 | df.plot.scatter(0, 1, s=50); 173 | 174 | ``` 175 | 176 | ![](img/db14263d5a46988e6474e8428b2365c0.jpg) 177 | 178 | 为了建立这个模式,我们可以使用最小二乘线性回归模型。我们在下面的图表中显示数据和模型的预测。 179 | 180 | ``` 181 | # HIDDEN 182 | df.plot.scatter(0, 1, s=50); 183 | plot_curve(curves[0]) 184 | 185 | ``` 186 | 187 | ![](img/1bdcfaac38525b33a3de831a659fe822.jpg) 188 | 189 | 可视化结果表明,该模型不捕获数据中的模式,模型具有很高的偏差。正如我们之前所做的,我们可以尝试通过在数据中添加多项式特征来解决这个问题。我们添加 2、8 和 12 度的多项式特征;下表显示了训练数据和每个模型的预测。 190 | 191 | ``` 192 | # HIDDEN 193 | plot_curves(curves) 194 | 195 | ``` 196 | 197 | ![](img/3761246072134f50d3d1c36bcc3489a7.jpg) 198 | 199 | 正如预期的那样,12 次多项式很好地匹配训练数据,但似乎也适合由噪声引起的数据中的伪模式。这提供了另一个关于偏差-方差权衡的说明:线性模型具有高偏差和低方差,而度 12 多项式具有低偏差但高方差。 200 | 201 | ## 检查系数[¶](#Examining-Coefficients) 202 | 203 | 检验 12 次多项式模型的系数,发现该模型根据以下公式进行预测: 204 | 205 | $$ 207097470825 + 1.8x + 482.6x^2 + 601.5x^3 + 872.8x^4 + 150486.6x^5 \\ + 2156.7x^6 - 307.2x^7 - 4.6x^8 + 0.2x^9 + 0.003x^{10} - 0.00005x^{11} + 0x^{12} $$ 206 | 207 | 其中$x$是当天的水位变化。 208 | 209 | 模型的系数相当大,尤其是对模型方差有显著贡献的更高阶项(例如,x^5$和 x^6$)。 210 | 211 | ## 惩罚参数[¶](#Penalizing-Parameters) 212 | 213 | 回想一下,我们的线性模型根据以下内容进行预测,其中$\theta$是模型权重,$x$是特征向量: 214 | 215 | $$ f_\hat{\theta}(x) = \hat{\theta} \cdot x $$ 216 | 217 | 为了适应我们的模型,我们将均方误差成本函数最小化,其中$x$用于表示数据矩阵,$y$用于观察结果: 218 | 219 | $$ \begin{aligned} L(\hat{\theta}, X, y) &= \frac{1}{n} \sum_{i}(y_i - f_\hat{\theta} (X_i))^2\\ \end{aligned} $$ 220 | 221 | 为了将上述成本降到最低,我们调整$\hat \theta$直到找到最佳的权重组合,而不管权重本身有多大。然而,我们发现更复杂特征的权重越大,模型方差越大。如果我们可以改变成本函数来惩罚较大的权重值,那么得到的模型将具有较低的方差。我们用正规化来增加这个惩罚。 -------------------------------------------------------------------------------- /docs/16.md: -------------------------------------------------------------------------------- 1 | # 正规化 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/16/reg_intro.html](https://www.textbook.ds100.org/ch/16/reg_intro.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/16')) 13 | 14 | ``` 15 | 16 | 特征工程可以将有关数据生成过程的重要信息合并到我们的模型中。但是,向数据中添加特性通常也会增加模型的方差,从而导致总体性能变差。我们可以使用一种称为正则化的技术来减少模型的方差,同时尽可能多地合并有关数据的信息,而不是完全抛弃特性。 -------------------------------------------------------------------------------- /docs/17.1.md: -------------------------------------------------------------------------------- 1 | # 概率回归 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/17/classification_prob.html](https://www.textbook.ds100.org/ch/17/classification_prob.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/17')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | ``` 46 | # HIDDEN 47 | def df_interact(df, nrows=7, ncols=7): 48 | ''' 49 | Outputs sliders that show rows and columns of df 50 | ''' 51 | def peek(row=0, col=0): 52 | return df.iloc[row:row + nrows, col:col + ncols] 53 | if len(df.columns) <= ncols: 54 | interact(peek, row=(0, len(df) - nrows, nrows), col=fixed(0)) 55 | else: 56 | interact(peek, 57 | row=(0, len(df) - nrows, nrows), 58 | col=(0, len(df.columns) - ncols)) 59 | print('({} rows, {} columns) total'.format(df.shape[0], df.shape[1])) 60 | 61 | ``` 62 | 63 | ``` 64 | # HIDDEN 65 | def jitter_df(df, x_col, y_col): 66 | x_jittered = df[x_col] + np.random.normal(scale=0, size=len(df)) 67 | y_jittered = df[y_col] + np.random.normal(scale=0.05, size=len(df)) 68 | return df.assign(**{x_col: x_jittered, y_col: y_jittered}) 69 | 70 | ``` 71 | 72 | 在篮球运动中,运动员通过一个篮筐射门得分。其中一位球员,勒布朗·詹姆斯,因其不可思议的得分能力被广泛认为是有史以来最好的篮球运动员之一。 73 | 74 | ![LeBron James (31944491583).jpg](img/6503fba9094def20f7c2dbf2cee1f45c.jpg) 75 | 76 | 勒布朗在美国超级篮球联盟国家篮球协会(NBA)打球。我们使用 NBA 统计网站([https://stats.nba.com/](https://stats.nba.com/))收集了勒布朗在 2017 年 NBA 季后赛中所有尝试的数据集。 77 | 78 | ``` 79 | lebron = pd.read_csv('lebron.csv') 80 | lebron 81 | 82 | ``` 83 | 84 | | | 游戏日期 | 分钟 | 对手 | 动作类型 | 镜头类型 | 射击距离 | 拍摄 | 85 | | --- | --- | --- | --- | --- | --- | --- | --- | 86 | | 零 | 20170415 年 | 10 个 | 因德 | 驾驶上篮得分 | 2pt 现场目标 | 零 | 0 | 87 | | --- | --- | --- | --- | --- | --- | --- | --- | 88 | | 1 个 | 20170415 | 11 个 | IND | Driving Layup Shot | 2PT Field Goal | 0 | 1 个 | 89 | | --- | --- | --- | --- | --- | --- | --- | --- | 90 | | 二 | 20170415 | 十四 | IND | 上篮得分 | 2PT Field Goal | 0 | 1 | 91 | | --- | --- | --- | --- | --- | --- | --- | --- | 92 | | …… | …… | ... | ... | ... | ... | ... | ... | 93 | | --- | --- | --- | --- | --- | --- | --- | --- | 94 | | 三百八十一 | 20170612 年 | 46 岁 | GSW | Driving Layup Shot | 2PT Field Goal | 1 | 1 | 95 | | --- | --- | --- | --- | --- | --- | --- | --- | 96 | | 382 个 | 20170612 | 47 岁 | GSW | 后仰跳投 | 2PT Field Goal | 14 | 0 | 97 | | --- | --- | --- | --- | --- | --- | --- | --- | 98 | | 三百八十三 | 20170612 | 48 岁 | GSW | Driving Layup Shot | 2PT Field Goal | 二 | 1 | 99 | | --- | --- | --- | --- | --- | --- | --- | --- | 100 | 101 | 384 行×7 列 102 | 103 | 此数据集的每一行都包含 Lebron 尝试拍摄的照片的以下属性: 104 | 105 | * `game_date`:比赛日期。 106 | * `minute`:尝试射门的分钟数(每场 NBA 比赛 48 分钟)。 107 | * `opponent`:勒布朗对手的球队缩写。 108 | * 【HTG0】:镜头前的动作类型。 109 | * `shot_type'`:放炮类型(2 分或 3 分)。 110 | * `shot_distance`:勒布朗尝试射门时与篮筐的距离(英尺)。 111 | * `shot_made`:`0`如果没打中,如果打中,则`1`。 112 | 113 | 我们想用这个数据集来预测勒布朗是否会在未来出击。这是一个 _ 分类问题 _;我们预测一个类别,而不是像在回归中那样的连续数。 114 | 115 | 我们可以通过预测一个镜头将进入的 _ 概率 _,将这个分类问题重新定义为一种回归问题。例如,我们预计当勒布朗离篮筐越远时,他投篮的概率就越低。 116 | 117 | 我们绘制了下面的射门尝试图,显示了 X 轴上与篮筐的距离以及他是否在 Y 轴上射门。稍微抖动 Y 轴上的点可以减少过度绘制。 118 | 119 | ``` 120 | # HIDDEN 121 | np.random.seed(42) 122 | sns.lmplot(x='shot_distance', y='shot_made', 123 | data=jitter_df(lebron, 'shot_distance', 'shot_made'), 124 | fit_reg=False, 125 | scatter_kws={'alpha': 0.3}) 126 | plt.title('LeBron Shot Make vs. Shot Distance'); 127 | 128 | ``` 129 | 130 | ![](img/972d0f384ba5cd9ccf73a1279401a7a5.jpg) 131 | 132 | 我们可以看到,当勒布朗离篮筐只有 5 英尺时,他往往投得最多。一个简单的最小二乘线性回归模型适合这个数据,产生以下预测: 133 | 134 | ``` 135 | # HIDDEN 136 | np.random.seed(42) 137 | sns.lmplot(x='shot_distance', y='shot_made', 138 | data=jitter_df(lebron, 'shot_distance', 'shot_made'), 139 | ci=None, 140 | scatter_kws={'alpha': 0.4}) 141 | plt.title('Simple Linear Regression'); 142 | 143 | ``` 144 | 145 | ![](img/db5d88d67ff62684a58369bd2e3c43c4.jpg) 146 | 147 | 线性回归预测连续值。但是,要执行分类,我们需要将该值转换为一个类别:放炮或未放炮。我们可以通过设置一个截止值或**分类阈值**来实现这一点。如果回归预测的值大于 0.5,我们预测放炮会发生。否则,我们就预测这次射击会失败。 148 | 149 | 我们在下面画一条绿色虚线。根据这个截止点,我们的模型预测,如果勒布朗在篮筐 15 英尺以内,他会投篮。 150 | 151 | ``` 152 | # HIDDEN 153 | np.random.seed(42) 154 | sns.lmplot(x='shot_distance', y='shot_made', 155 | data=jitter_df(lebron, 'shot_distance', 'shot_made'), 156 | ci=None, 157 | scatter_kws={'alpha': 0.4}) 158 | plt.axhline(y=0.5, linestyle='--', c='g') 159 | plt.title('Cutoff for Classification'); 160 | 161 | ``` 162 | 163 | ![](img/22d09c2a3672ad86ceaf928c368c5c8e.jpg) 164 | 165 | 在上面的步骤中,我们尝试执行回归来预测一次放炮的可能性。如果我们的回归产生了一个概率,那么设定 0.5 的临界值意味着我们预测当我们的模型认为一个镜头进入的可能性比丢失的镜头更大时,一个镜头会进入。我们将在本章后面重新讨论分类阈值的主题。 166 | 167 | ## 概率线性回归问题 168 | 169 | 不幸的是,我们的线性模型的预测不能解释为概率。有效概率必须介于 0 和 1 之间,但我们的线性模型违反了这一条件。例如,当勒布朗距离篮筐 100 英尺时,他投篮的概率应该接近于零。然而,在这种情况下,我们的模型将预测负值。 170 | 171 | 如果我们改变我们的回归模型,使它的预测可以被解释为概率,我们就不会对使用它的预测进行分类感到不安。我们用一个新的预测函数和一个新的损失函数来实现这一点。生成的模型称为**逻辑模型**。 -------------------------------------------------------------------------------- /docs/17.2.md: -------------------------------------------------------------------------------- 1 | # Logistic 模型 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/17/classification_log_model.html](https://www.bookbookmark.ds100.org/ch/17/classification_log_model.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/17')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | ``` 46 | # HIDDEN 47 | def df_interact(df, nrows=7, ncols=7): 48 | ''' 49 | Outputs sliders that show rows and columns of df 50 | ''' 51 | def peek(row=0, col=0): 52 | return df.iloc[row:row + nrows, col:col + ncols] 53 | if len(df.columns) <= ncols: 54 | interact(peek, row=(0, len(df) - nrows, nrows), col=fixed(0)) 55 | else: 56 | interact(peek, 57 | row=(0, len(df) - nrows, nrows), 58 | col=(0, len(df.columns) - ncols)) 59 | print('({} rows, {} columns) total'.format(df.shape[0], df.shape[1])) 60 | 61 | ``` 62 | 63 | ``` 64 | # HIDDEN 65 | def jitter_df(df, x_col, y_col): 66 | x_jittered = df[x_col] + np.random.normal(scale=0, size=len(df)) 67 | y_jittered = df[y_col] + np.random.normal(scale=0.05, size=len(df)) 68 | return df.assign(**{x_col: x_jittered, y_col: y_jittered}) 69 | 70 | ``` 71 | 72 | ``` 73 | # HIDDEN 74 | lebron = pd.read_csv('lebron.csv') 75 | 76 | ``` 77 | 78 | 在本节中,我们将介绍**逻辑模型**,这是一个用于预测概率的回归模型。 79 | 80 | 回想一下,拟合一个模型需要三个部分:一个预测模型、一个损失函数和一个优化方法。对于目前熟悉的最小二乘线性回归,我们选择模型: 81 | 82 | $$ \begin{aligned} f_\hat{\boldsymbol{\theta}} (\textbf{x}) &= \hat{\boldsymbol{\theta}} \cdot \textbf{x} \end{aligned} $$ 83 | 84 | 损失函数: 85 | 86 | $$ \begin{aligned} L(\boldsymbol{\theta}, \textbf{X}, \textbf{y}) &= \frac{1}{n} \sum_{i}(y_i - f_\boldsymbol{\theta} (\textbf{X}_i))^2\\ \end{aligned} $$ 87 | 88 | 我们使用梯度下降作为优化方法。在上面的定义中,$\textbf x$表示$n \乘以 p$的数据矩阵($n$表示数据点的数目,$p$表示属性的数目),$\textbf x$表示一行$\textbf x,$textbf y$表示观察结果的向量。矢量$\BoldSymbol \Hat \Theta 包含最佳模型权重,而$\BoldSymbol \Theta 包含优化期间生成的中间权重值。 89 | 90 | ## 实数与概率 91 | 92 | 观察到模型$f_ \hat \\\123\123\123; \123\\123\123\125\\\\125\\123\\\123\\\\\\\\\\\\\\\\. 93 | 94 | 当$x$是一个标量时,我们可以很容易地看到这一点。如果$\hat\theta=0.5$,我们的模型将变为$f \theta(\textbf x)=0.5 x$。它的预测值可以是从负无穷大到正无穷大的任意值: 95 | 96 | ``` 97 | # HIDDEN 98 | xs = np.linspace(-100, 100, 100) 99 | ys = 0.5 * xs 100 | plt.plot(xs, ys) 101 | plt.xlabel('$x$') 102 | plt.ylabel(r'$f_\hat{\theta}(x)$') 103 | plt.title(r'Model Predictions for $ \hat{\theta} = 0.5 $'); 104 | 105 | ``` 106 | 107 | ![](img/bca488c8e5140d58f991399136c7ae50.jpg) 108 | 109 | 对于分类任务,我们希望限制$f_ \hat \boldSymbol \theta(\textbf x)$以便将其输出解释为概率。这意味着它只能输出$[0,1]$范围内的值。此外,我们希望$f_ux \boldsymbol \theta(\textbf x)$的大值对应于高概率,小值对应于低概率。 110 | 111 | ## Logistic 功能[¶](#The-Logistic-Function) 112 | 113 | 为了实现这一点,我们引入了**逻辑函数**,通常称为**乙状结肠函数**: 114 | 115 | $$ \begin{aligned} \sigma(t) = \frac{1}{1 + e^{-t}} \end{aligned} $$ 116 | 117 | 为了便于阅读,我们经常将$E^X$替换为$\text exp(x)$并写下: 118 | 119 | $$ \begin{aligned} \sigma (t) = \frac{1}{1 + \text{exp}(-t)} \end{aligned} $$ 120 | 121 | 我们为下面的值$t\in[-10,10]$绘制 sigmoid 函数。 122 | 123 | ``` 124 | # HIDDEN 125 | from scipy.special import expit 126 | xs = np.linspace(-10, 10, 100) 127 | ys = expit(xs) 128 | plt.plot(xs, ys) 129 | plt.title(r'Sigmoid Function') 130 | plt.xlabel('$ t $') 131 | plt.ylabel(r'$ \sigma(t) $'); 132 | 133 | ``` 134 | 135 | ![](img/62db30e6efedf81de7301650e413f9ad.jpg) 136 | 137 | 观察 sigmoid 函数$\sigma(t)$接受任何实数$\mathbb r,只输出 0 到 1 之间的数字。函数在其输入$t$上单调递增;根据需要,$t$的大值对应于接近 1 的值。这不是巧合,虽然我们省略了简单性的推导,但 sigmoid 函数可以从概率的对数比中推导出来。 138 | 139 | ## Logistic 模型定义 140 | 141 | 我们现在可以将我们的线性模型$\hat \boldSymbol \theta \cdot\textbf x$作为 sigmoid 函数的输入来创建**逻辑模型**: 142 | 143 | $$ \begin{aligned} f_\hat{\boldsymbol{\theta}} (\textbf{x}) = \sigma(\hat{\boldsymbol{\theta}} \cdot \textbf{x}) \end{aligned} $$ 144 | 145 | 换句话说,我们将线性回归的输出取为$\mathbb r 美元中的任意数字,并使用 sigmoid 函数将模型的最终输出限制为介于 0 和 1 之间的有效概率。 146 | 147 | 为了对 Logistic 模型的行为产生一些直观的认识,我们将$x$限制为一个标量,并将 Logistic 模型的输出绘制为几个值,即$hat \theta。 148 | 149 | ``` 150 | # HIDDEN 151 | def flatten(li): return [item for sub in li for item in sub] 152 | 153 | thetas = [-2, -1, -0.5, 2, 1, 0.5] 154 | xs = np.linspace(-10, 10, 100) 155 | 156 | fig, axes = plt.subplots(2, 3, sharex=True, sharey=True, figsize=(10, 6)) 157 | for ax, theta in zip(flatten(axes), thetas): 158 | ys = expit(theta * xs) 159 | ax.plot(xs, ys) 160 | ax.set_title(r'$ \hat{\theta} = $' + str(theta)) 161 | 162 | # add a big axes, hide frame 163 | fig.add_subplot(111, frameon=False) 164 | # hide tick and tick label of the big axes 165 | plt.tick_params(labelcolor='none', top='off', bottom='off', 166 | left='off', right='off') 167 | plt.grid(False) 168 | plt.xlabel('$x$') 169 | plt.ylabel(r'$ f_\hat{\theta}(x) $') 170 | plt.tight_layout() 171 | 172 | ``` 173 | 174 | ![](img/05fbbe5293d201e889083cf2ed0019f8.jpg) 175 | 176 | 我们看到,改变\θ的幅度会改变曲线的锐度;距离 0$越远,曲线的锐度就越高。翻转$\hat \theta 的符号,同时保持大小不变,相当于反映 Y 轴上的曲线。 177 | 178 | ## 摘要[¶](#Summary) 179 | 180 | 我们引入了逻辑模型,这是一个输出概率的新预测函数。为了建立模型,我们使用线性回归的输出作为非线性逻辑函数的输入。 -------------------------------------------------------------------------------- /docs/17.3.md: -------------------------------------------------------------------------------- 1 | # Logistic 模型的损失函数 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/17/classification_cost.html](https://www.textbook.ds100.org/ch/17/classification_cost.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/17')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | ``` 46 | # HIDDEN 47 | def df_interact(df, nrows=7, ncols=7): 48 | ''' 49 | Outputs sliders that show rows and columns of df 50 | ''' 51 | def peek(row=0, col=0): 52 | return df.iloc[row:row + nrows, col:col + ncols] 53 | if len(df.columns) <= ncols: 54 | interact(peek, row=(0, len(df) - nrows, nrows), col=fixed(0)) 55 | else: 56 | interact(peek, 57 | row=(0, len(df) - nrows, nrows), 58 | col=(0, len(df.columns) - ncols)) 59 | print('({} rows, {} columns) total'.format(df.shape[0], df.shape[1])) 60 | 61 | ``` 62 | 63 | ``` 64 | # HIDDEN 65 | lebron = pd.read_csv('lebron.csv') 66 | 67 | ``` 68 | 69 | 我们定义了概率的回归模型,逻辑模型: 70 | 71 | $$ \begin{aligned} f_\hat{\boldsymbol{\theta}} (\textbf{x}) = \sigma(\hat{\boldsymbol{\theta}} \cdot \textbf{x}) \end{aligned} $$ 72 | 73 | 与线性回归模型一样,该模型也有参数$\Hat \BoldSymbol \Theta$,这是一个向量,它为每个$\textbf x 的特征包含一个参数。我们现在解决的问题是为这个模型定义一个损失函数,它允许我们将模型的参数与数据相匹配。 74 | 75 | 直观地说,我们希望模型的预测与数据尽可能接近。下面,我们用每球与篮筐之间的距离,重现了勒布朗在 2017 年 NBA 季后赛中的投篮尝试。这些点在 Y 轴上抖动以减轻过度绘制。 76 | 77 | ``` 78 | # HIDDEN 79 | np.random.seed(42) 80 | sns.lmplot(x='shot_distance', y='shot_made', 81 | data=lebron, 82 | fit_reg=False, ci=False, 83 | y_jitter=0.1, 84 | scatter_kws={'alpha': 0.3}) 85 | plt.title('LeBron Shot Attempts') 86 | plt.xlabel('Distance from Basket (ft)') 87 | plt.ylabel('Shot Made'); 88 | 89 | ``` 90 | 91 | ![](img/bbfe1461c481a9d20ccc0605674a3fed.jpg) 92 | 93 | 注意到篮筐附近的大量投篮和篮筐远处的较小的错失投篮,我们预计此数据上的逻辑模型可能如下所示: 94 | 95 | ``` 96 | # HIDDEN 97 | from scipy.special import expit 98 | 99 | np.random.seed(42) 100 | sns.lmplot(x='shot_distance', y='shot_made', 101 | data=lebron, 102 | fit_reg=False, ci=False, 103 | y_jitter=0.1, 104 | scatter_kws={'alpha': 0.3}) 105 | 106 | xs = np.linspace(-2, 32, 100) 107 | ys = expit(-0.15 * (xs - 15)) 108 | plt.plot(xs, ys, c='r', label='Logistic model') 109 | 110 | plt.title('Possible logistic model fit') 111 | plt.xlabel('Distance from Basket (ft)') 112 | plt.ylabel('Shot Made'); 113 | 114 | ``` 115 | 116 | ![](img/8a24c53d6add631048ea934239225e8d.jpg) 117 | 118 | 虽然我们可以像线性回归那样使用均方误差损失函数,但对于一个逻辑模型来说,它是非凸的,因此难以优化。 119 | 120 | ## 交叉熵损失 121 | 122 | 我们使用**交叉熵损失**来代替均方误差。让$\textbf x$表示 P$输入数据矩阵的$n 倍,$\textbf y$表示观测数据值的矢量,$f \boldsymbol \theta(\textbf x)$表示逻辑模型。$\BoldSymbol \Theta$包含当前参数值。使用此符号,平均交叉熵损失定义为: 123 | 124 | $$ \begin{aligned} L(\boldsymbol{\theta}, \textbf{X}, \textbf{y}) = \frac{1}{n} \sum_i \left(- y_i \ln (f_\boldsymbol{\theta}(\textbf{X}_i)) - (1 - y_i) \ln (1 - f_\boldsymbol{\theta}(\textbf{X}_i) \right) \end{aligned} $$ 125 | 126 | 您可以观察到,像往常一样,我们对数据集中的每个点取平均损失。上述总和中的内部表达式表示一个数据点的损失$(\textbf x u i,y_i)$: 127 | 128 | $$ \begin{aligned} \ell(\boldsymbol{\theta}, \textbf{X}_i, y_i) = - y_i \ln (f_\boldsymbol{\theta}(\textbf{X}_i)) - (1 - y_i) \ln (1 - f_\boldsymbol{\theta}(\textbf{X}_i) ) \end{aligned} $$ 129 | 130 | 回想一下,数据集中的每个$y_i$都是 0 或 1。如果 Y_i=0 美元,损失的第一项为零。如果 Y_i=1 美元,损失中的第二项为零。因此,对于数据集中的每个点,只有一个交叉熵损失项会导致整体损失。 131 | 132 | 假设$y_i=0$和我们的预测概率$f_uuBoldSymbol \theta(\textbf x _i)=0$我们的模型是完全正确的。这一点的损失将是: 133 | 134 | $$ \begin{aligned} \ell(\boldsymbol{\theta}, \textbf{X}_i, y_i) &= - y_i \ln (f_\boldsymbol{\theta}(\textbf{X}_i)) - (1 - y_i) \ln (1 - f_\boldsymbol{\theta}(\textbf{X}_i) ) \\ &= - 0 - (1 - 0) \ln (1 - 0 ) \\ &= - \ln (1) \\ &= 0 \end{aligned} $$ 135 | 136 | 正如预期的那样,正确预测的损失是 0 美元。您可以验证预测概率与真实值越远,损失越大。 137 | 138 | 最大限度地减少总体交叉熵损失需要模型$F_BoldSymbol \Theta(\textbf_x)$来做出最准确的预测。方便的是,该损失函数是凸的,使得梯度下降成为一种有用的优化选择。 139 | 140 | ## 交叉熵损失梯度 141 | 142 | 为了对模型的交叉熵损失进行梯度下降,必须计算损失函数的梯度。首先,我们计算 sigmoid 函数的导数,因为我们将在梯度计算中使用它。 143 | 144 | $$ \begin{aligned} \sigma(t) &= \frac{1}{1 + e^{-t}} \\ \sigma'(t) &= \frac{e^{-t}}{(1 + e^{-t})^2} \\ \sigma'(t) &= \frac{1}{1 + e^{-t}} \cdot \left(1 - \frac{1}{1 + e^{-t}} \right) \\ \sigma'(t) &= \sigma(t) (1 - \sigma(t)) \end{aligned} $$ 145 | 146 | 乙状结肠功能的导数可以方便地用乙状结肠功能本身来表示。 147 | 148 | 简而言之,我们定义了$\sigma(\textbf x u i)=\sigma(\textbf x u i \cdot \boldsymbol \theta)$。我们很快就需要.\sigma i$相对于向量.\boldsymbol \theta 的梯度,因此我们现在将使用链规则的直接应用来推导它。 149 | 150 | $$ \begin{aligned} \nabla_{\boldsymbol{\theta}} \sigma_i &= \nabla_{\boldsymbol{\theta}} \sigma(\textbf{X}_i \cdot \boldsymbol{\theta}) \\ &= \sigma(\textbf{X}_i \cdot \boldsymbol{\theta}) (1 - \sigma(\textbf{X}_i \cdot \boldsymbol{\theta})) \nabla_{\boldsymbol{\theta}} (\textbf{X}_i \cdot \boldsymbol{\theta}) \\ &= \sigma_i (1 - \sigma_i) \textbf{X}_i \end{aligned} $$ 151 | 152 | 现在,我们推导出交叉熵损失相对于模型参数$\BoldSymbol \Theta 的梯度。在下面的推导中,我们让$\sigma_i=f_ \boldsymbol \theta(\textbf x(\textbf x u i \cdot \boldsymbol \theta)$。 153 | 154 | $$ \begin{aligned} L(\boldsymbol{\theta}, \textbf{X}, \textbf{y}) &= \frac{1}{n} \sum_i \left(- y_i \ln (f_\boldsymbol{\theta}(\textbf{X}_i)) - (1 - y_i) \ln (1 - f_\boldsymbol{\theta}(\textbf{X}_i) \right) \\ &= \frac{1}{n} \sum_i \left(- y_i \ln \sigma_i - (1 - y_i) \ln (1 - \sigma_i) \right) \\ \nabla_{\boldsymbol{\theta}} L(\boldsymbol{\theta}, \textbf{X}, \textbf{y}) &= \frac{1}{n} \sum_i \left( - \frac{y_i}{\sigma_i} \nabla_{\boldsymbol{\theta}} \sigma_i + \frac{1 - y_i}{1 - \sigma_i} \nabla_{\boldsymbol{\theta}} \sigma_i \right) \\ &= - \frac{1}{n} \sum_i \left( \frac{y_i}{\sigma_i} - \frac{1 - y_i}{1 - \sigma_i} \right) \nabla_{\boldsymbol{\theta}} \sigma_i \\ &= - \frac{1}{n} \sum_i \left( \frac{y_i}{\sigma_i} - \frac{1 - y_i}{1 - \sigma_i} \right) \sigma_i (1 - \sigma_i) \textbf{X}_i \\ &= - \frac{1}{n} \sum_i \left( y_i - \sigma_i \right) \textbf{X}_i \\ \end{aligned} $$ 155 | 156 | 令人惊讶的简单梯度表达式允许我们使用梯度下降将逻辑模型拟合到交叉熵损失: 157 | 158 | $$ \hat{\boldsymbol{\theta}} = \displaystyle\arg \min_{\substack{\boldsymbol{\theta}}} L(\boldsymbol{\theta}, \textbf{X}, \textbf{y})$$ 159 | 160 | 第 17.6 节探讨了批量、随机和小批量梯度下降的更新公式。 161 | 162 | ## 摘要[¶](#Summary) 163 | 164 | 由于交叉熵损失函数是凸的,因此我们使用梯度下降将其最小化,以使逻辑模型适合数据。我们现在有了逻辑回归的必要组成部分:模型、损失函数和最小化过程。在第 17.5 节中,我们更详细地了解了为什么我们使用平均交叉熵损失进行逻辑回归。 -------------------------------------------------------------------------------- /docs/17.5.md: -------------------------------------------------------------------------------- 1 | # 经验概率分布的近似 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/17/classification_cost_justification.html](https://www.textbook.ds100.org/ch/17/classification_cost_justification.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/17')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | 在本节中,我们介绍了**kl 散度**,并演示了如何将二进制分类中的平均 kl 散度最小化等同于将平均交叉熵损失最小化。 46 | 47 | 由于逻辑回归输出概率,逻辑模型产生一定类型的概率分布。具体地说,基于最优参数$\hat \boldSymbol \theta$,它估计标签$y$对于示例输入$\textbf x 为$1$的可能性。 48 | 49 | 例如,假设$X$是一个标量,记录了一天的预测下雨机会,$Y=1$意味着 DOE 先生带着雨伞去工作。一个带有标量参数$\hat \theta$的逻辑模型预测,在预测下雨的可能性下,doe 先生带伞的概率为:$\hat p \theta(y=1 x)$。 50 | 51 | 收集有关 doe 先生伞式使用的数据为我们提供了一种构建经验概率分布$p(y=1_x)$的方法。例如,如果有五天下雨的可能性是$X=0.60 美元,而 DOE 先生只带了一把雨伞去上班,$P(Y=1_X=0.60)=0.20 美元。我们可以为数据中出现的每个$x$值计算类似的概率分布。当然,在拟合逻辑模型后,我们希望模型预测的分布尽可能接近数据集的经验分布。也就是说,对于我们数据中出现的所有$x$值,我们需要: 52 | 53 | $$ \hat{P_\theta}(y = 1 | x) \approx P(y = 1 | x) $$ 54 | 55 | 确定两个概率分布的“紧密性”的一个常用度量是 Kullback——Leibler 散度,或称 kl 散度,其根源在于信息论。 56 | 57 | ## 定义平均 kl 发散度[¶](#Defining-Average-KL-Divergence) 58 | 59 | KL 散度量化了由我们的 Logistic 模型计算的概率分布$\Hat P BoldSymbol \Theta$与基于数据集的实际分布$P$之间的差异。直观地,它计算逻辑模型如何不精确地估计标签在数据中的分布。 60 | 61 | 对于单个数据点$(\textbf x,y)$的两个分布$p$和$\hat p boldsymbol \theta$之间的二进制分类的 kl 差异由以下公式给出: 62 | 63 | $$D(P || \hat{P_\boldsymbol{\theta}}) = P(y = 0 | \textbf{x}) \ln \left(\frac{P(y = 0 | \textbf{x})}{\hat{P_\boldsymbol{\theta}}(y = 0 | \textbf{x})}\right) + P(y = 1 | \textbf{x}) \ln \left(\frac{P(y = 1 | \textbf{x})}{\hat{P_\boldsymbol{\theta}}(y = 1 | \textbf{x})}\right)$$ 64 | 65 | KL 散度不是对称的,即$p$与$p$与$p$与$p$与$p$与$p$与$d(P 124 124 \\124 \124 \123 \ \ \ \\123 \\\ \\\\\\\\\(P)$$ 66 | 67 | 由于我们的目标是使用$\hat p boldsymbol \theta 美元,因此我们关注的是$d(p \hat p \boldsymbol \theta 美元)。 68 | 69 | 最好的$\BoldSymbol \Theta$值,我们将其表示为$\Hat \BoldSymbol \Theta$将整个$n$点数据集的平均 kl 发散最小化: 70 | 71 | $$ \text{Average KL Divergence} = \frac{1}{n} \sum_{i=1}^{n} \left(P(y_i = 0 | \textbf{X}_i) \ln \left(\frac{P(y_i = 0 | \textbf{X}_i)}{\hat{P_\boldsymbol{\theta}}(y_i = 0 | \textbf{X}_i)}\right) + P(y_i = 1 | \textbf{X}_i) \ln \left(\frac{P(y_i = 1 | \textbf{X}_i)}{\hat{P_\boldsymbol{\theta}}(y_i = 1 | \textbf{X}_i)}\right)\right)$$$$ \hat{\boldsymbol{\theta}} = \displaystyle\arg \min_{\substack{\boldsymbol{\theta}}} (\text{Average KL Divergence}) $$ 72 | 73 | 在上面的公式中,数据点$i ^ \text th 表示为($\textbf x u i$,$y i$),其中,$\textbf x u i$是观察到的结果。 74 | 75 | KL 的差异并不影响与$P$相关的罕见事件的不匹配。如果模型预测实际罕见事件的高概率,那么$p(k)$和$\ln\left(\frac p(k)p boldsymbol \theta(k)right)$都很低,因此差异也很低。但是,如果模型预测实际常见事件的概率较低,则散度较高。我们可以推断,与精确预测罕见事件但在常见事件上差异很大的模型相比,精确预测常见事件的逻辑模型与$P$的差异较小。 76 | 77 | ## 由 kl 发散推导交叉熵损失 78 | 79 | 上述平均 kl 散度方程的结构与交叉熵损失具有一些表面相似性。我们现在将用一些代数操作证明,最小化平均 kl 散度实际上等于最小化平均交叉熵损失。 80 | 81 | Using properties of logarithms, we can rewrite the weighted log ratio: $$P(y_i = k | \textbf{X}_i) \ln \left(\frac{P(y_i = k | \textbf{X}_i)}{\hat{P_\boldsymbol{\theta}}(y_i = k | \textbf{X}_i)}\right) = P(y_i = k | \textbf{X}_i) \ln P(y_i = k | \textbf{X}_i) - P(y_i = k | \textbf{X}_i) \ln \hat{P_\粗体符号\ theta(y u i=k \ textbf x u i)$$ 82 | 83 | 请注意,由于第一个术语不依赖于$\BoldSymbol \Theta$,因此它不会影响$\DisplayStyle\Arg\Min \Substack \BoldSymbol \Theta$并且可以从公式中删除。由此得到的表达式是模型的交叉熵损失$\Hat P BoldSymbol \Theta$: 84 | 85 | $$ \text{Average Cross-Entropy Loss} = \frac{1}{n} \sum_{i=1}^{n} - P(y_i = 0 | \textbf{X}_i) \ln \hat{P_\theta}(y_i = 0 | \textbf{X}_i) - P(y_i = 1 | \textbf{X}_i) \ln \hat{P_\theta}(y_i = 1 | \textbf{X}_i)$$$$ \hat{\boldsymbol{\theta}} = \displaystyle\arg \min_{\substack{\theta}} (\text{Average Cross-Entropy Loss}) $$ 86 | 87 | 由于标签$Y_I$是已知值,因此$Y_I=1$、$P(Y_I=1 textbf x u I)$等于$Y_I$和$P(Y_I=0 textbf x u I)$的概率等于$1-Y_I$。模型的概率分布$\hat p boldsymbol \theta 由前两节讨论的 sigmoid 函数的输出给出。进行这些替换后,我们得出平均交叉熵损失方程: 88 | 89 | $$ \text{Average Cross-Entropy Loss} = \frac{1}{n} \sum_i \left(- y_i \ln (f_\hat{\boldsymbol{\theta}}(\textbf{X}_i)) - (1 - y_i) \ln (1 - f_\hat{\boldsymbol{\theta}}(\textbf{X}_i) \right) $$$$ \hat{\boldsymbol{\theta}} = \displaystyle\arg \min_{\substack{\theta}} (\text{Average Cross-Entropy Loss}) $$ 90 | 91 | ## 交叉熵损失的统计解释 92 | 93 | 交叉熵损失在统计学上也有基础。由于逻辑回归模型预测概率,给定一个特定的逻辑模型,我们可以问,“这个模型产生一组观察到的结果的概率是多少?”我们可以自然地调整模型的参数,直到从模型中提取数据集的概率尽可能高。尽管在本节中我们不会证明这一点,但该程序相当于最小化交叉熵损失,这是交叉熵损失的 _ 最大似然 _ 统计证明。 94 | 95 | ## 摘要[¶](#Summary) 96 | 97 | 平均 kl 差异可以解释为$p$和$hat p boldsymbol \theta$p$加权的两个分布之间的平均对数差异。最小化平均 kl 发散也最小化平均交叉熵损失。我们可以通过选择对常见数据进行精确分类的参数来减少逻辑回归模型的分歧。 -------------------------------------------------------------------------------- /docs/17.6.md: -------------------------------------------------------------------------------- 1 | # 拟合 Logistic 模型 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/17/classification_sgd.html](https://www.textbook.ds100.org/ch/17/classification_sgd.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/17')) 13 | 14 | ``` 15 | 16 | ``` 17 | # HIDDEN 18 | import warnings 19 | # Ignore numpy dtype warnings. These warnings are caused by an interaction 20 | # between numpy and Cython and can be safely ignored. 21 | # Reference: https://stackoverflow.com/a/40846742 22 | warnings.filterwarnings("ignore", message="numpy.dtype size changed") 23 | warnings.filterwarnings("ignore", message="numpy.ufunc size changed") 24 | 25 | import numpy as np 26 | import matplotlib.pyplot as plt 27 | import pandas as pd 28 | import seaborn as sns 29 | %matplotlib inline 30 | import ipywidgets as widgets 31 | from ipywidgets import interact, interactive, fixed, interact_manual 32 | import nbinteract as nbi 33 | 34 | sns.set() 35 | sns.set_context('talk') 36 | np.set_printoptions(threshold=20, precision=2, suppress=True) 37 | pd.options.display.max_rows = 7 38 | pd.options.display.max_columns = 8 39 | pd.set_option('precision', 2) 40 | # This option stops scientific notation for pandas 41 | # pd.set_option('display.float_format', '{:.2f}'.format) 42 | 43 | ``` 44 | 45 | 之前,我们讨论了批量梯度下降,这是一种迭代更新$\BoldSymbol \Theta 的算法,以查找损失最小化参数$\BoldSymbol \Theta$。讨论了随机梯度下降和小批量梯度下降,利用统计理论和并行硬件的方法来减少训练梯度下降算法的时间。在本节中,我们将把这些概念应用到逻辑回归中,并使用 SciKit 学习函数遍历示例。 46 | 47 | ### 批梯度下降 48 | 49 | 批梯度下降的一般更新公式如下: 50 | 51 | $$ \boldsymbol{\theta}^{(t+1)} = \boldsymbol{\theta}^{(t)} - \alpha \cdot \nabla_\boldsymbol{\theta} L(\boldsymbol{\theta}^{(t)}, \textbf{X}, \textbf{y}) $$ 52 | 53 | 在逻辑回归中,我们使用交叉熵损失作为我们的损失函数: 54 | 55 | $$ L(\boldsymbol{\theta}, \textbf{X}, \textbf{y}) = \frac{1}{n} \sum_{i=1}^{n} \left(-y_i \ln \left(f_{\boldsymbol{\theta}} \left(\textbf{X}_i \right) \right) - \left(1 - y_i \right) \ln \left(1 - f_{\boldsymbol{\theta}} \left(\textbf{X}_i \right) \right) \right) $$ 56 | 57 | 交叉熵损失的梯度为$\nabla_ \boldsymbol \theta l(\boldsymbol \theta、\textbf x、\textbf y)=-\frac 1 n \sum i=1 ^n(y \sigma x u i$。把它插入到更新公式中,我们就可以找到特定于逻辑回归的梯度下降算法。让$\sigma_i=f_ \boldSymbol \theta(\textbf x u i)=\sigma(\textbf x u i \cdot \boldSymbol \theta)$: 58 | 59 | $$ \begin{align} \boldsymbol{\theta}^{(t+1)} &= \boldsymbol{\theta}^{(t)} - \alpha \cdot \left(- \frac{1}{n} \sum_{i=1}^{n} \left(y_i - \sigma_i\right) \textbf{X}_i \right) \\ &= \boldsymbol{\theta}^{(t)} + \alpha \cdot \left(\frac{1}{n} \sum_{i=1}^{n} \left(y_i - \sigma_i\right) \textbf{X}_i \right) \end{align} $$ 60 | 61 | * $\BoldSymbol \Theta ^(t)$是迭代$t 时当前对$\BoldSymbol \Theta$的估计$ 62 | * $\alpha$是学习率 63 | * $-\frac 1 n \ sum i=1 n \ left(y i-\sigma i \ right)textbf x u i$是交叉熵损失的梯度 64 | * $\BoldSymbol \Theta(t+1)$是通过减去\Alpha$的乘积和以\BoldSymbol \Theta(t)计算的交叉熵损失的下一个估计数。$ 65 | 66 | ### 随机梯度下降 67 | 68 | 随机梯度下降使用单个数据点的损失梯度近似所有观测的损失函数的梯度。一般更新公式如下,其中$\ell(\boldsymbol \theta,\textbf x u i,y_i)$是单个数据点的损失函数: 69 | 70 | $$ \boldsymbol{\theta}^{(t+1)} = \boldsymbol{\theta}^{(t)} - \alpha \nabla_\boldsymbol{\theta} \ell(\boldsymbol{\theta}, \textbf{X}_i, y_i) $$ 71 | 72 | 回到我们在逻辑回归中的例子,我们使用一个数据点的交叉熵损失梯度来近似所有数据点的交叉熵损失梯度。如下所示,其中$\sigma_i=f \boldsymbol \theta(\textbf x u i)=\sigma(\textbf x u i\cdot\boldsymbol \theta)$。 73 | 74 | $$ \begin{align} \nabla_\boldsymbol{\theta} L(\boldsymbol{\theta}, \textbf{X}, \textbf{y}) &\approx \nabla_\boldsymbol{\theta} \ell(\boldsymbol{\theta}, \textbf{X}_i, y_i)\\ &= -(y_i - \sigma_i)\textbf{X}_i \end{align} $$ 75 | 76 | 当我们把这个近似值代入随机梯度下降的一般公式时,我们找到了逻辑回归的随机梯度下降更新公式。 77 | 78 | $$ \begin{align} \boldsymbol{\theta}^{(t+1)} &= \boldsymbol{\theta}^{(t)} - \alpha \nabla_\boldsymbol{\theta} \ell(\boldsymbol{\theta}, \textbf{X}_i, y_i) \\ &= \boldsymbol{\theta}^{(t)} + \alpha \cdot (y_i - \sigma_i)\textbf{X}_i \end{align} $$ 79 | 80 | ### 小批量梯度下降 81 | 82 | 同样,我们可以使用一个随机的数据点样本(称为小批量)来近似所有观测的交叉熵损失梯度。 83 | 84 | $$ \nabla_\boldsymbol{\theta} L(\boldsymbol{\theta}, \textbf{X}, \textbf{y}) \approx \frac{1}{|\mathcal{B}|} \sum_{i\in\mathcal{B}}\nabla_{\boldsymbol{\theta}} \ell(\boldsymbol{\theta}, \textbf{X}_i, y_i) $$ 85 | 86 | 我们将此近似值替换为交叉熵损失的梯度,得出一个特定于逻辑回归的小批量梯度下降更新公式: 87 | 88 | $$ \begin{align} \boldsymbol{\theta}^{(t+1)} &= \boldsymbol{\theta}^{(t)} - \alpha \cdot -\frac{1}{|\mathcal{B}|} \sum_{i\in\mathcal{B}}(y_i - \sigma_i)\textbf{X}_i \\ &= \boldsymbol{\theta}^{(t)} + \alpha \cdot \frac{1}{|\mathcal{B}|} \sum_{i\in\mathcal{B}}(y_i - \sigma_i)\textbf{X}_i \end{align} $$ 89 | 90 | ## SciKit Learn[¶](#Implementation-in-Scikit-learn)中的实现 91 | 92 | Scikit Learn 的[`SGDClassifier`](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html)类提供了随机梯度下降的实现,我们可以通过指定`loss=log`来使用它。由于 SciKit Learn 没有实现批梯度下降的模型,因此我们将比较`SGDClassifier`与[`LogisticRegression`](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html)在`emails`数据集上的性能。为了简洁起见,我们省略了特征提取: 93 | 94 | ``` 95 | # HIDDEN 96 | emails = pd.read_csv('emails_sgd.csv').sample(frac=0.5) 97 | 98 | X, y = emails['email'], emails['spam'] 99 | X_tr = CountVectorizer().fit_transform(X) 100 | 101 | X_train, X_test, y_train, y_test = train_test_split(X_tr, y, random_state=42) 102 | 103 | y_train = y_train.reset_index(drop=True) 104 | y_test = y_test.reset_index(drop=True) 105 | 106 | ``` 107 | 108 | ``` 109 | log_reg = LogisticRegression(tol=0.0001, random_state=42) 110 | stochastic_gd = SGDClassifier(tol=0.0001, loss='log', random_state=42) 111 | 112 | ``` 113 | 114 | ``` 115 | %%time 116 | log_reg.fit(X_train, y_train) 117 | log_reg_pred = log_reg.predict(X_test) 118 | print('Logistic Regression') 119 | print(' Accuracy: ', accuracy_score(y_test, log_reg_pred)) 120 | print(' Precision: ', precision_score(y_test, log_reg_pred)) 121 | print(' Recall: ', recall_score(y_test, log_reg_pred)) 122 | print() 123 | 124 | ``` 125 | 126 | ``` 127 | Logistic Regression 128 | Accuracy: 0.9913793103448276 129 | Precision: 0.974169741697417 130 | Recall: 0.9924812030075187 131 | 132 | CPU times: user 3.2 s, sys: 0 ns, total: 3.2 s 133 | Wall time: 3.26 s 134 | 135 | ``` 136 | 137 | ``` 138 | %%time 139 | stochastic_gd.fit(X_train, y_train) 140 | stochastic_gd_pred = stochastic_gd.predict(X_test) 141 | print('Stochastic GD') 142 | print(' Accuracy: ', accuracy_score(y_test, stochastic_gd_pred)) 143 | print(' Precision: ', precision_score(y_test, stochastic_gd_pred)) 144 | print(' Recall: ', recall_score(y_test, stochastic_gd_pred)) 145 | print() 146 | 147 | ``` 148 | 149 | ``` 150 | Stochastic GD 151 | Accuracy: 0.9808429118773946 152 | Precision: 0.9392857142857143 153 | Recall: 0.9887218045112782 154 | 155 | CPU times: user 93.8 ms, sys: 31.2 ms, total: 125 ms 156 | Wall time: 119 ms 157 | 158 | ``` 159 | 160 | 以上结果表明,与`LogisticRegression`相比,`SGDClassifier`能够在更短的时间内找到解决方案。虽然`SGDClassifier`的评估指标稍差,但我们可以通过调整超参数来提高`SGDClassifier`的性能。此外,这种差异也是数据科学家在现实世界中经常遇到的一种权衡。根据具体情况,数据科学家可能会在较低的运行时或较高的度量标准上赋予更大的价值。 161 | 162 | ## 摘要[¶](#Summary) 163 | 164 | 随机梯度下降是数据科学家用来降低计算成本和运行时间的一种方法。我们可以在 logistic 回归中看到随机梯度下降的值,因为我们只需要计算每次迭代一次观测的交叉熵损失梯度,而不需要计算每次批量梯度下降观测的交叉熵损失梯度。从使用 Scikit Learn 的`SGDClassifier`的示例中,我们观察到随机梯度下降可能会实现稍微差一点的评估指标,但会显著提高运行时。在更大的数据集或更复杂的模型上,运行时的差异可能更大,因此更有价值。 -------------------------------------------------------------------------------- /docs/17.md: -------------------------------------------------------------------------------- 1 | # 分类 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/17/classification_intro.html](https://www.textbook.ds100.org/ch/17/classification_intro.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/17')) 13 | 14 | ``` 15 | 16 | 到目前为止,我们已经研究了回归模型、基于数据进行连续数值估计的过程。现在我们将注意力转向**分类**,这是一个基于数据进行分类预测的过程。例如,气象站有兴趣利用今天的天气状况预测明天是否会下雨。 17 | 18 | 回归和分类共同构成了 _ 监督学习 _ 的主要方法,即基于观察到的输入输出对学习模型的一般任务。 19 | 20 | 我们可以把分类重构为一类回归问题。我们不创建预测任意数字的模型,而是创建预测数据点属于某个类别的概率的模型。这使得我们可以重用线性回归的机制来回归概率:逻辑回归。 -------------------------------------------------------------------------------- /docs/18.md: -------------------------------------------------------------------------------- 1 | # 统计推断 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/18/hyp_intro.html](https://www.textbook.ds100.org/ch/18/hyp_intro.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/18')) 13 | 14 | ``` 15 | 16 | 尽管数据科学家经常使用个别的数据样本,但我们几乎总是有兴趣对从中收集数据的人群进行归纳。本章讨论了 _ 统计推断 _ 的方法,即使用数据集得出整个总体的结论的过程。 17 | 18 | 统计推断主要依靠两种方法:假设检验和置信区间。在最近的一段时间里,这些方法严重依赖于正常理论,这是一个需要对人口进行大量假设的统计学分支。今天,强大计算资源的快速增长使得基于 _ 重采样 _ 的一类新方法得以推广到许多类型的人群中。 19 | 20 | 我们首先回顾使用置换测试和引导方法的推理。然后介绍了回归推理和偏态分布的自举方法。 -------------------------------------------------------------------------------- /docs/19.md: -------------------------------------------------------------------------------- 1 | # 向量空间回顾 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/19/vector_space_review.html](https://www.textbook.ds100.org/ch/19/vector_space_review.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/19')) 13 | 14 | ``` 15 | 16 | * [矢量定义](#Definition-of-a-vector) 17 | * [缩放和添加向量](#Scaling-and-adding-vectors) 18 | * [矢量符号](#Vector-notations) 19 | * [矢量$\vec 1$vector](#The-$\vec{1}$-vector) 20 | 21 | * [一组向量的跨度](#Span-of-a-set-of-vectors) 22 | * [向量空间](#Vector-spaces) 23 | * [向量子空间](#Vector-subspaces) 24 | 25 | * [向量之间的角度](#Angles-between-vectors) 26 | * [矢量长度](#Vector-lengths) 27 | * [两个向量之间的距离](#Distance-between-two-vectors) 28 | * [正交向量](#Orthogonal-vectors) 29 | * [矢量投影](#Projections-of-vectors) 30 | 31 | ### 向量的定义[¶](#Definition-of-a-vector) 32 | 33 | 矢量由长度和方向定义。 34 | 35 | ![](img/182f6f318b418119e2dca747b379a9ca.jpg) 36 | 37 | 注意,$\vec x 和$\vec y 具有相同的长度和方向。它们是相等的向量。 38 | 39 | ### 缩放和添加向量 40 | 41 | 缩放向量就是改变向量的长度。 42 | 43 | ![](img/1c986b4165be183e66852e3a412016a4.jpg) 44 | 45 | 注意$\vec 2x$和$\vec y$有方向但长度不同。他们不平等。 46 | 47 | 若要添加两个向量$\vec y+\vec z$,请根据$\vec y 的长度执行一步,然后立即根据\vec z 的长度执行一步(反之亦然)。这也被称为三角形方法,将向量的初始点放在另一个向量的端点上。 48 | 49 | ![](img/96d2456e7d205f246a828e103b63dadf.jpg) 50 | 51 | ### 矢量符号 52 | 53 | 向量通常用笛卡尔坐标表示。 54 | 55 | ![](img/628c62f5df1179ba1429e5fd9affb692.jpg) 56 | 57 | $$ \vec{x} = \begin{bmatrix} 1 \\ 4 \end{bmatrix} , \quad \vec{y} = \begin{bmatrix} 3 \\ 2 \end{bmatrix} , \quad \vec{z} = \begin{bmatrix} 4 \\ 0 \end{bmatrix}$$ 58 | 59 | 在这个符号中,我们前面看到的算术运算变得非常简单。 60 | 61 | $$ \vec{2x} = \begin{bmatrix} 2 \\ 8 \end{bmatrix} , \quad \vec{-0.5z} = \begin{bmatrix} -2 \\ 0 \end{bmatrix} , \quad \vec{2x + -0.5z} = \begin{bmatrix} 0 \\ 8 \end{bmatrix} $$ 62 | 63 | ![](img/119e829a3cfa7ada54a9c69482cc0d1d.jpg) 64 | 65 | 可以添加向量并按比例缩放元素: 66 | 67 | $$a \vec{x} + b \vec{y} = \begin{bmatrix} a \ x_1 & + & b \ y_1 \\ & \vdots & \\ a \ x_n & + & b \ y_n \end{bmatrix} $$ 68 | 69 | ### $\vec 1$vector[¶](#The-$\vec{1}$-vector) 70 | 71 | 在任何$d$维空间中,$\vec 1 是所有$1$的向量:$\begin bmatrix 1 \\vdots\\1 \end bmatrix$ 72 | 73 | ### 一组向量的跨度 74 | 75 | 一组向量的跨度$\ \ vec v、\vec v、\dots、\vec v p 是所有可能的线性组合的集合。对于这些$P$向量: 76 | 77 | $$ \{ c_1 \ \vec{v_1} + c_2 \ \vec{v_2} + \dots + c_p \ \vec{v_p} \ : \ \forall c_i \in F\}$$ 78 | 79 | 其中$F$是向量空间的字段(超出范围)。 80 | 81 | ### 向量空间 82 | 83 | 向量空间$v$是一组向量的跨度,$n\ vec \ vec \ v,\vec \ v,\dots,\vec v \ p,其中每个$\ vec v,$是$n\乘以 1$维列向量。 84 | 85 | ### 向量子空间 86 | 87 | $v$的子空间$u$是一组向量的跨度($v\ vec \ vec u、\dots、\vec u \ u),其中每个向量($vec u i)以 v$表示。这意味着$U$中的每一个向量也都是$V$中的。 88 | 89 | ### 向量间的角度 90 | 91 | 当您将任意两个向量端到端放置而不改变它们的方向时,可以测量它们之间的角度。 92 | 93 | ![](img/1ab785cde23f64a60b44c020541edac1.jpg) 94 | 95 | ### 向量长度[¶](#Vector-lengths) 96 | 97 | 直觉在$\mathbb r ^2$中: 98 | 99 | 回想一下加上两个向量的三角形方法。如果我们在$\mathbb 2$中添加两个垂直向量$\vec vec 在这种情况下,我们还知道,$\vec a+\vec b$的长度将遵循勾股定理:$\sqrt a^2+b^2$。 100 | 101 | ![](img/a65f83358494936835dc0ec67e90d9a4.jpg) 102 | 103 | 马蹄布 r \\\125\125\\124\123;\\124\124\124\\\124\124; 124\124\124; \124\124\124\\\\\\\\\\\\\;V \端对齐$$ 104 | 105 | 其中,最后一个运算符是点积。 106 | 107 | $$ \begin{aligned} \vec{x} \cdot \vec{y} \quad &= \quad x_1 \ y_1 + x_2 \ y_2 + \dots + x_n \ y_n \\ &= \quad||x|| \ ||y|| \ \cos{\theta} \end{aligned} $$ 108 | 109 | 第一个表达式称为点积的代数定义,第二个表达式称为几何定义。注意,点积是为$\mathbb r ^n$中的向量定义的内积。 110 | 111 | ### 两个向量之间的距离 112 | 113 | $$dist(\vec{x},\vec{y}) \quad = \quad || \vec{x} - \vec{y} ||$$ 114 | 115 | ![](img/02a0ecd58c4410b6e73184acc9ace95a.jpg) 116 | 117 | ### 正交向量 118 | 119 | 要使两个非零向量正交,它们必须满足$\vec x \cdot\vec y=0$的属性。因为它们的长度不是零,所以两个向量正交的唯一方法是当$\cos \theta=0$时。一个令人满意的角度是 90 度,我们熟悉的直角。 120 | 121 | ### 向量投影 122 | 123 | 要将一个向量$\vec x 投射到另一个向量$\vec y 上,我们需要找到最接近于\vec x 的$K\\vec y$ 124 | 125 | ![](img/f452adf39ee9d4ba9c363d7cd150a23d.jpg) 126 | 127 | 根据毕达哥拉斯定理,我们知道$k$必须是标量,这样,$vec x-k\\vec y 就垂直于$vec-y,所以$k\\vec y 是$vec x 到$vec y 的(正交)投影。 128 | 129 | 同样地,为了将一个矢量\\\\\\123 \ 123,点,\\123\123\123\\\\123\\\\123\\123\\\\\\\\123;v_p 美元,最接近于\vec x 美元。 130 | 131 | ![](img/8839f2182bcbe3d327adc8d24f8e2323.jpg) -------------------------------------------------------------------------------- /docs/20.1.md: -------------------------------------------------------------------------------- 1 | # Pandas 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/20/ref_pandas.html](https://www.bookbookmark.ds100.org/ch/20/ref_pandas.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/20')) 13 | 14 | ``` 15 | 16 | | 功能 | 第章 | 说明 | 17 | | --- | --- | --- | 18 | | [`pd.DataFrame(data)`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html) | 表格数据和 Pandas | 从二维数组或字典创建数据帧`data` | 19 | | [`pd.read_csv(filepath)`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html) | Tabular Data and pandas | 将 csv 文件从`filepath`导入为 Pandas 数据帧 | 20 | | 【HTG2】【HTG0】【HTG3】【HTG4】【HTG5】【HTG1】【HTG6】 | Tabular Data and pandas | 查看数据帧或序列的第一行`n` | 21 | | 【HTG0】【HTG2】【HTG1】 | Tabular Data and pandas | 查看数据帧的索引和列值 | 22 | | 【HTG2】【HTG0】【HTG3】【HTG4】【HTG5】【HTG1】【HTG6】 | 探索性数据分析 | 查看有关数据帧或序列的描述性统计信息 | 23 | | [`pd.Series.unique()`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.unique.html) | Exploratory Data Analysis | 查看序列中的唯一值 | 24 | | [`pd.Series.value_counts()`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.value_counts.html) | Exploratory Data Analysis | 查看序列中每个唯一值出现的次数 | 25 | | `df[col]` | Tabular Data and pandas | 从数据帧`df`返回列`col`作为一个系列 | 26 | | `df[[col]]` | Tabular Data and pandas | 从数据帧`df`返回列`col`作为数据帧 | 27 | | `df.loc[row, col]` | Tabular Data and pandas | 从 dataframe`df`返回索引名为`row`和列名为`col`的行;`row`也可以是布尔序列 | 28 | | `df.iloc[row, col]` | Tabular Data and pandas | 从数据帧`df`返回索引号为`row`和列号为`col`的行;`row`也可以是布尔序列 | 29 | | 【HTG2】【HTG0】【HTG3】【HTG4】【HTG5】【HTG1】【HTG6】 | 数据清理 | 查看数据帧或序列中缺少的值 | 30 | | 【HTG2】【HTG0】【HTG3】【HTG4】【HTG5】【HTG1】【HTG6】 | Data Cleaning | 用`value`填充数据帧或序列中缺少的值 | 31 | | 【HTG2】【HTG0】【HTG3】【HTG4】【HTG5】【HTG1】【HTG6】 | Data Cleaning | 从数据帧或序列中删除缺少值的行或列 | 32 | | [`pd.DataFrame.drop(labels, axis)`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop.html) | Data Cleaning | 沿`axis`从数据框中删除名为`labels`的行或列 | 33 | | [`pd.DataFrame.rename()`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rename.html) | Data Cleaning | 重命名数据帧中的指定行或列 | 34 | | [`pd.DataFrame.replace(to_replace, value)`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html) | Data Cleaning | 在数据帧中用`value`替换`to_replace`值 | 35 | | [`pd.DataFrame.reset_index(drop=False)`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reset_index.html) | Data Cleaning | 重置数据帧的索引;默认情况下,将旧索引保留为新列,除非指定了`drop=True` | 36 | | [`pd.DataFrame.sort_values(by, ascending=True)`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.html) | Tabular Data and pandas | 按指定列`by`对数据帧排序,默认为升序 | 37 | | [`pd.DataFrame.groupby(by)`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html) | Tabular Data and pandas | 返回 GroupBy 对象,该对象包含按指定列中的值分组的数据帧`by` | 38 | | [`GroupBy.<function>`](https://pandas.pydata.org/pandas-docs/stable/api.html#id41) | Tabular Data and pandas | 将函数`<function>`应用于 groupby 对象`GroupBy`中的每个组,例如[`mean()`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.mean.html),[`count()`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.count.html) | 39 | | [`pd.Series.<function>`](https://pandas.pydata.org/pandas-docs/stable/api.html#computations-descriptive-stats) | Tabular Data and pandas | 将函数`<function>`应用于具有数值的序列;例如[`mean()`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.mean.html)、[`max()`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.max.html)、[`median()`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.median.html) | 40 | | [`pd.Series.str.<function>`](https://pandas.pydata.org/pandas-docs/stable/api.html#string-handling) | Tabular Data and pandas | 将函数`<function>`应用于具有字符串值的序列;例如[`len()`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.len.html)、[`lower()`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.lower.html)、[`split()`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.split.html) | 41 | | [`pd.Series.dt.<property>`](https://pandas.pydata.org/pandas-docs/stable/api.html#datetimelike-properties) | Tabular Data and pandas | 从具有日期时间值的序列中提取属性`<property>`,例如[`year`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.year.html),[`month`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.month.html),[`date`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.date.html) | 42 | | [`pd.get_dummies(columns, drop_first=False)`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html) | --- | 将分类变量`columns`转换为虚拟变量;默认值保留所有变量,除非指定了`drop_first=True`。 | 43 | | [`pd.merge(left, right, how, on)`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html) | 探索性数据分析;数据库和 SQL | 在指定的列`on`上将两个数据帧`left`和`right`合并在一起;连接类型取决于`how` | 44 | | [`pd.read_sql(sql, con)`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html) | 数据库和 SQL | 读取数据库连接`con`上的 SQL 查询`sql`,并将结果作为 Pandas 数据帧返回 | -------------------------------------------------------------------------------- /docs/20.2.md: -------------------------------------------------------------------------------- 1 | # Seaborn 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/20/ref_seaborn.html](https://www.bookbookmark.ds100.org/ch/20/ref_seaborn.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/20')) 13 | 14 | ``` 15 | 16 | | 功能 | 第章 | 说明 | 17 | | --- | --- | --- | 18 | | [`sns.lmplot(x, y, data, fit_reg=True)`](https://seaborn.pydata.org/generated/seaborn.lmplot.html) | 数据可视化 | 从数据帧`data`创建`x`对`y`的散点图,默认情况下覆盖最小二乘回归线 | 19 | | [`sns.distplot(a, kde=True)`](https://seaborn.pydata.org/generated/seaborn.distplot.html) | Data Visualization | 创建`a`的柱状图,默认情况下覆盖一个内核密度估计量 | 20 | | [`sns.barplot(x, y, hue=None, data, ci=95)`](https://seaborn.pydata.org/generated/seaborn.barplot.html) | Data Visualization | 从数据帧`data`创建`x`对`y`的条形图,可以选择基于`hue`对数据进行因子分解,默认情况下绘制 95%的置信区间(可使用`ci=None`关闭)。 | 21 | | [`sns.countplot(x, hue=None, data)`](https://seaborn.pydata.org/generated/seaborn.countplot.html) | Data Visualization | 创建一个从数据框`data`中选择的变量`x`的值计数的条形图,可以选择由分类变量`hue`分解。 | 22 | | [`sns.boxplot(x=None, y, data)`](https://seaborn.pydata.org/generated/seaborn.boxplot.html) | Data Visualization | 从数据帧`data`创建`y`的箱线图,也可以通过分类变量`x`进行因子分解。 | 23 | | [`sns.kdeplot(x, y=None)`](https://seaborn.pydata.org/generated/seaborn.kdeplot.html) | Data Visualization | 如果`y=None`,则创建一个单变量密度图`x`;如果指定了`y`,则创建一个双变量密度图。 | 24 | | [`sns.jointplot(x, y, data)`](https://seaborn.pydata.org/generated/seaborn.jointplot.html) | Data Visualization | 将数据帧`data`中`x`与`y`的双变量散射图与轴上覆盖的每个变量的单变量密度图相结合。 | 25 | | [`sns.violinplot(x=None, y, data)`](https://seaborn.pydata.org/generated/seaborn.violinplot.html) | Data Visualization | 绘制变量`y`的组合箱线图和核密度估计量,可选择由从数据帧`data`中选择的分类变量`x`分解。 | -------------------------------------------------------------------------------- /docs/20.3.md: -------------------------------------------------------------------------------- 1 | # Matplotlib 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/20/ref_matplotlib.html](https://www.textbook.ds100.org/ch/20/ref_matplotlib.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/20')) 13 | 14 | ``` 15 | 16 | ### 绘图类型[¶](#Types-of-Plots) 17 | 18 | | 功能 | 第章 | 说明 | 19 | | --- | --- | --- | 20 | | [`plt.scatter(x, y)`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html) | 数据可视化 | 创建变量 x 相对于变量 y 的散点图 | 21 | | [`plt.plot(x, y)`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html) | Data Visualization | 创建变量 x 相对于变量 y 的线图 | 22 | | [`plt.hist(x, bins=None)`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html) | Data Visualization | 创建 x 的柱状图。bins 参数可以是整数或序列 | 23 | | [`plt.bar(x, height)`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.bar.html) | Data Visualization | 创建条形图。`x`指定条的 X 坐标,`height`指定条的高度 | 24 | | [`plt.axvline(x=0)`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.axvline.html) | Data Visualization | 在指定的 X 值处创建垂直线 | 25 | | [`plt.axhline(y=0)`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.axhline.html) | Data Visualization | 在指定的 Y 值处创建水平线 | 26 | 27 | ### 绘图添加[¶](#Plot-additions) 28 | 29 | | Function | Chapter | Description | 30 | | --- | --- | --- | 31 | | [`%matplotlib inline`](http://ipython.readthedocs.io/en/stable/interactive/plotting.html) | Data Visualization | 使打印命令的输出以内联方式显示 | 32 | | [`plt.figure(figsize=(3, 5))`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.figure.html) | Data Visualization | 创建宽度为 3 英寸、高度为 5 英寸的图形 | 33 | | [`plt.xlim(xmin, xmax)`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.xlim.html) | Data Visualization | 设置当前轴的 X 极限 | 34 | | [`plt.xlabel(label)`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.xlabel.html) | Data Visualization | 设置当前轴的 X 轴标签 | 35 | | [`plt.title(label)`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.title.html) | Data Visualization | 设置当前轴的标题 | 36 | | [`plt.legend(x, height)`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.legend.html) | Data Visualization | 在轴上放置图例 | 37 | | [`fig, ax = plt.subplots()`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplots.html) | Data Visualization | 创建一个数字和一组子批次 | 38 | | [`plt.show()`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.show.html) | Data Visualization | 显示一个数字 | -------------------------------------------------------------------------------- /docs/20.4.md: -------------------------------------------------------------------------------- 1 | # Scikit Learn 2 | 3 | > 原文:[https://www.bookbookmark.ds100.org/ch/20/ref_sklearn.html](https://www.bookbookmark.ds100.org/ch/20/ref_sklearn.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/20')) 13 | 14 | ``` 15 | 16 | ## 型号和型号选择 17 | 18 | | 进口 | 功能 | 截面 | 说明 | 19 | | --- | --- | --- | --- | 20 | | `sklearn.model_selection` | [`train_test_split(*arrays, test_size=0.2)`](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html) | 建模与估计 | 返回传入的每个数组的两个随机子集,其中第一个子集中有 0.8 个数组,第二个子集中有 0.2 个数组 | 21 | | `sklearn.linear_model` | [`LinearRegression()`](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html) | Modeling and Estimation | 返回普通最小二乘线性回归模型 | 22 | | `sklearn.linear_model` | [`LassoCV()`](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html) | Modeling and Estimation | 返回通过交叉验证选择最佳模型的 Lasso(L1 正则化)线性模型 | 23 | | `sklearn.linear_model` | [`RidgeCV()`](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html) | Modeling and Estimation | 返回一个脊线(L2 正则化)线性模型,并通过交叉验证选择最佳模型 | 24 | | `sklearn.linear_model` | [`ElasticNetCV()`](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html) | Modeling and Estimation | 返回 ElasticNet(l1 和 l2 正则化)线性模型,并通过交叉验证选择最佳模型 | 25 | | `sklearn.linear_model` | [`LogisticRegression()`](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html) | Modeling and Estimation | 返回逻辑回归分类器 | 26 | | `sklearn.linear_model` | [`LogisticRegressionCV()`](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegressionCV.html) | Modeling and Estimation | 返回通过交叉验证选择最佳模型的逻辑回归分类器 | 27 | 28 | ## 使用模型[¶](#Working-with-a-Model) 29 | 30 | 假设您有一个`model`变量是`scikit-learn`对象: 31 | 32 | | Function | Section | Description | 33 | | --- | --- | --- | 34 | | `model.fit(X, y)` | Modeling and Estimation | 与传入的 X 和 Y 匹配的模型 | 35 | | `model.predict(X)` | Modeling and Estimation | 返回根据模型传入的 x 的预测 | 36 | | `model.score(X, y)` | Modeling and Estimation | 返回基于 corect 值(y)的 x 预测精度 | -------------------------------------------------------------------------------- /docs/20.md: -------------------------------------------------------------------------------- 1 | # 参考表 2 | 3 | > 原文:[https://www.textbook.ds100.org/ch/20/ref_intro.html](https://www.textbook.ds100.org/ch/20/ref_intro.html) 4 | 5 | ``` 6 | # HIDDEN 7 | # Clear previously defined variables 8 | %reset -f 9 | 10 | # Set directory for data loading to work properly 11 | import os 12 | os.chdir(os.path.expanduser('~/notebooks/20')) 13 | 14 | ``` 15 | 16 | 本附录包含本书中使用的`pandas`、`seaborn`、`matplotlib`和`scikit-learn`方法的参考表。它的目的是对我们在本书中最常使用的方法的一小部分提供一个有用的概述。 17 | 18 | 对于每个库,我们列出了使用的方法、首先提到每个方法的章节,以及对方法功能的简要描述。 -------------------------------------------------------------------------------- /docs/7.md: -------------------------------------------------------------------------------- 1 | # Web 技术 2 | 3 | > 原文:[Web Technologies](https://www.textbook.ds100.org/ch/07/web_intro.html) 4 | > 5 | > 校验:[Kitty Du](https://github.com/miaoxiaozui2017) 6 | > 7 | > 自豪地采用[谷歌翻译](https://translate.google.cn/) 8 | 9 | ```python 10 | # HIDDEN 11 | # Clear previously defined variables 12 | %reset -f 13 | 14 | # Set directory for data loading to work properly 15 | import os 16 | os.chdir(os.path.expanduser('~/notebooks/07')) 17 | 18 | ``` 19 | 20 | 在互联网出现之前,数据科学家必须通过物理方式移动硬盘驱动器与其他人共享数据。现在,我们可以自由地从世界各地的计算机中检索数据集。 21 | 22 | 虽然我们使用互联网下载和共享数据文件,但互联网上的网页本身包含大量的信息,如文本、图像和视频。通过学习Web技术,我们可以使用Web作为数据源。在本章中,我们将介绍 Web 的主要通信协议 HTTP,以及 Web 页面的主要文档格式 XML/HTML。 23 | -------------------------------------------------------------------------------- /docs/8.md: -------------------------------------------------------------------------------- 1 | # 处理文本 2 | 3 | > 原文:[Working with Text](https://www.textbook.ds100.org/ch/08/text_intro.html) 4 | > 5 | > 校验:[Kitty Du](https://github.com/miaoxiaozui2017) 6 | > 7 | > 自豪地采用[谷歌翻译](https://translate.google.cn/) 8 | 9 | ```python 10 | # HIDDEN 11 | # Clear previously defined variables 12 | %reset -f 13 | 14 | # Set directory for data loading to work properly 15 | import os 16 | os.chdir(os.path.expanduser('~/notebooks/08')) 17 | 18 | ``` 19 | 20 | 大量的数据不是像CSV 中的数字那样,而是像书籍、文档、博客文章和互联网评论中的自由文本。数字和分类数据通常是从物理现象中收集的,而文本数据是从人类的交流和表达中产生的。与大多数类型的数据一样,有许多处理文本的技术,需要多本书来详细解释。在本章中,我们将介绍这些技术中的一小部分,它们为处理文本提供各种有用的操作:Python 字符串操作和正则表达式。 21 | -------------------------------------------------------------------------------- /docs/9.1.md: -------------------------------------------------------------------------------- 1 | # 关系数据库 2 | 3 | > 原文:[Relational Databases](https://www.bookbookmark.ds100.org/ch/09/sql_rdbms.html) 4 | > 5 | > 校验:[Kitty Du](https://github.com/miaoxiaozui2017) 6 | > 7 | > 自豪地采用[谷歌翻译](https://translate.google.cn/) 8 | 9 | ```python 10 | # HIDDEN 11 | # Clear previously defined variables 12 | %reset -f 13 | 14 | # Set directory for data loading to work properly 15 | import os 16 | os.chdir(os.path.expanduser('~/notebooks/09')) 17 | 18 | ``` 19 | 20 | **数据库**是有组织的数据集合。过去,数据存储在专门为特定任务设计的数据结构中。例如,航空公司记录航班预定的格式可能不同于银行管理账户分类账的格式。1969 年,Ted Codd 将关系模型作为一种存储数据的通用方法引入。数据存储在被称为**关系(relations)** 的二维表中,由每行中的单个观察值(通常称为**元组(tuples)** )组成。每个元组都是一个结构化数据项,表示某些**属性(attributes)**(列) 之间的关系。关系的每个属性都有一个名称和数据类型。 21 | 22 | 考虑下面的`purchases`关系: 23 | 24 |
**purchases**
25 | 26 | | **name** | **product** | **retailer** | **data purchased** | 27 | | --: | --: | --: | --:| 28 | | Samantha | iPod | Best Buy | June 3,2016 | 29 | | Timothy | Chromebook | Amazon | July 8,2016 | 30 | | Jason | Surface Pro | Target | October 2,2016 | 31 | 32 | 在`purchases`中,每个元组表示`name`、`product`、`retailer`和`date purchased`属性之间的关系。 33 | 34 | 关系的 *模式(schema)* 包含其列名、数据类型和约束。例如,`purchases`表的模式说明列是`name`、`product`、`retailer`和`date purchased`;它还说明每个列都包含文本。 35 | 36 | 以下`prices`关系显示了一些零售商店中某些小物件的价格: 37 | 38 |
**prices**
39 | 40 | | **retailer** | **product** | **price** | 41 | | --: | --: | --: | 42 | | Best Buy | Galaxy S9 | 719.00 | 43 | | Best Buy | iPod | 200.00 | 44 | | Amazon | iPad | 450.00 | 45 | | Amazon | Battery pack | 24.87 | 46 | | Amazon | Chromebook | 249.99 | 47 | | Target | iPod | 215.00 | 48 | | Target | Surface Pro | 799.00 | 49 | | Target | Google Pixel 2 | 659.00 | 50 | | Walmart | Chromebook | 238.79 | 51 | 52 | 然后,我们可以同时参考这两个表来确定 Samantha、Timothy 和 Jason 为各自的小物件支付了多少钱(假设每家店的价格随时间保持不变)。这两个表一起构成了一个**关系数据库(relational database)** ,它是一个或多个关系的集合。整个数据库的模式是数据库中各个关系的模式集。 53 | 54 | ## 关系数据库管理系统[](#Relational-Database-Management-Systems) 55 | 56 | 关系数据库可以简单地描述为一组包含单个数据项行的表。关系数据库管理系统(RDBMSs)提供了到关系数据库的接口。[Oracle](https://www.wikiwand.com/en/Oracle_Database)、[MySQL](https://www.wikiwand.com/en/MySQL)和[PostgreSQL](https://www.wikiwand.com/en/PostgreSQL)是目前实践中最常用的三种 RDBMS。 57 | 58 | 关系数据库管理系统使用户能够添加、编辑和删除数据库中的数据。与使用文本文件集合存储数据相比,这些系统提供了几个关键好处,包括: 59 | 60 | 1. 可靠的数据存储:RDBMS 保护数据不受系统故障或崩溃的影响。 61 | 2. 性能:RDBMS 通常比文本文件更高效地存储数据,并且拥有完善的查询数据的算法。 62 | 3. 数据管理:RDBMSS 实现访问控制,防止未经授权的用户访问敏感数据集。 63 | 4. 数据一致性:RDBMSS 可以对输入的数据施加约束,例如,列`GPA`只包含介于 0.0 和 4.0 之间的浮点数。 64 | 65 | 为了处理存储在 RDBMS 中的数据,我们使用 SQL 编程语言。 66 | 67 | ## RDBMS 与 pandas 的对比[](#RDBMS-vs-pandas) 68 | 69 | RDBMS 和 `pandas` Python 包有何区别?首先,`pandas`不关心数据存储。虽然 数据帧(DataFrame) 可以从多种数据格式中读写,但 `pandas` 并不像 RDBMS 那样规定数据实际存储在底层计算机上的方式。其次,`pandas` 主要提供操作数据的方法,而 RDBMS 同时处理数据存储和数据操作,使它们更适合于较大的数据集。一个典型的经验法则是对大于几 GB 的数据集使用 RDBMS。最后,`pandas` 需要了解 Python 才能使用,而 RDBMS 需要了解 SQL。由于 SQL 比 Python 学习起来简单,RDBMS 允许用户使用较少的技术就能存储和查询数据,这是一个方便的特性。 70 | -------------------------------------------------------------------------------- /docs/9.md: -------------------------------------------------------------------------------- 1 | # 关系数据库和 SQL 2 | 3 | > 原文:[Relational Databases and SQL](https://www.textbook.ds100.org/ch/09/sql_intro.html) 4 | > 5 | > 校验:[Kitty Du](https://github.com/miaoxiaozui2017) 6 | 7 | ```python 8 | # HIDDEN 9 | # Clear previously defined variables 10 | %reset -f 11 | 12 | # Set directory for data loading to work properly 13 | import os 14 | os.chdir(os.path.expanduser('~/notebooks/09')) 15 | 16 | ``` 17 | 18 | 到目前为止,我们已经处理了作为文本文件存储在计算机上的数据集。虽然使用文本文件存储数据对于分析小数据集很有用,但对许多实际用例来说却是一个挑战。 19 | 20 | 许多数据集是由多个人收集的,例如,一个数据科学家团队。但是,如果数据存储在文本文件中,那么团队可能需要在每次更新数据时发送和下载新版本的文件。文本文件本身并不能为多个分析员提供一致的数据检索点。这个问题,以及其他问题,使得文本文件难以用于更大的数据集或团队。 21 | 22 | 我们经常使用关系数据库管理系统(RDBMS)来存储数据,如 MySQL 或 PostgreSQL。为了使用这些系统,我们使用一种称为 SQL 的查询语言,而不是 Python。在本章中,我们将讨论关系数据库模型并介绍 SQL。 23 | -------------------------------------------------------------------------------- /docs/img/012e643b0a14c04165145874e8d2d6cd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/012e643b0a14c04165145874e8d2d6cd.jpg -------------------------------------------------------------------------------- /docs/img/02a0ecd58c4410b6e73184acc9ace95a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/02a0ecd58c4410b6e73184acc9ace95a.jpg -------------------------------------------------------------------------------- /docs/img/0396507ddaf1d70ceb3fcfe12eeac42c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/0396507ddaf1d70ceb3fcfe12eeac42c.jpg -------------------------------------------------------------------------------- /docs/img/05fbbe5293d201e889083cf2ed0019f8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/05fbbe5293d201e889083cf2ed0019f8.jpg -------------------------------------------------------------------------------- /docs/img/0783fba8899f40de628b34f93129359c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/0783fba8899f40de628b34f93129359c.jpg -------------------------------------------------------------------------------- /docs/img/0a2d571dbabc5c2d04f2841add0602d5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/0a2d571dbabc5c2d04f2841add0602d5.jpg -------------------------------------------------------------------------------- /docs/img/0ce3e484b2dc0eef8d92bf1f4fc4be3d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/0ce3e484b2dc0eef8d92bf1f4fc4be3d.jpg -------------------------------------------------------------------------------- /docs/img/1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1-1.png -------------------------------------------------------------------------------- /docs/img/1-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1-2.png -------------------------------------------------------------------------------- /docs/img/1-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1-3.png -------------------------------------------------------------------------------- /docs/img/1-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1-4.png -------------------------------------------------------------------------------- /docs/img/119e829a3cfa7ada54a9c69482cc0d1d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/119e829a3cfa7ada54a9c69482cc0d1d.jpg -------------------------------------------------------------------------------- /docs/img/141ff04bbd787a6e5c678987efbbc3c9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/141ff04bbd787a6e5c678987efbbc3c9.jpg -------------------------------------------------------------------------------- /docs/img/162826f0fe770b3a65a5ff4fbe720bfa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/162826f0fe770b3a65a5ff4fbe720bfa.jpg -------------------------------------------------------------------------------- /docs/img/182f6f318b418119e2dca747b379a9ca.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/182f6f318b418119e2dca747b379a9ca.jpg -------------------------------------------------------------------------------- /docs/img/1981680eb840352e8c8cd53ba6edf6dc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1981680eb840352e8c8cd53ba6edf6dc.jpg -------------------------------------------------------------------------------- /docs/img/19b6f7050bb66736a7fb5e0f9035e5b6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/19b6f7050bb66736a7fb5e0f9035e5b6.jpg -------------------------------------------------------------------------------- /docs/img/1ab785cde23f64a60b44c020541edac1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1ab785cde23f64a60b44c020541edac1.jpg -------------------------------------------------------------------------------- /docs/img/1bdcfaac38525b33a3de831a659fe822.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1bdcfaac38525b33a3de831a659fe822.jpg -------------------------------------------------------------------------------- /docs/img/1c244258ff328b51a885453d3f0de801.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1c244258ff328b51a885453d3f0de801.jpg -------------------------------------------------------------------------------- /docs/img/1c986b4165be183e66852e3a412016a4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1c986b4165be183e66852e3a412016a4.jpg -------------------------------------------------------------------------------- /docs/img/1d9cc73484fafe3fdd5868d3949ddfd4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1d9cc73484fafe3fdd5868d3949ddfd4.jpg -------------------------------------------------------------------------------- /docs/img/1e2691240fb999398e82a3cee07625c9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1e2691240fb999398e82a3cee07625c9.jpg -------------------------------------------------------------------------------- /docs/img/1e2bbbbbdf2aa3eb3b3f913fc49e4a6f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1e2bbbbbdf2aa3eb3b3f913fc49e4a6f.jpg -------------------------------------------------------------------------------- /docs/img/1e8bd1ef3091864b80be6040a03ca02b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/1e8bd1ef3091864b80be6040a03ca02b.jpg -------------------------------------------------------------------------------- /docs/img/2-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/2-1.jpg -------------------------------------------------------------------------------- /docs/img/2-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/2-2.png -------------------------------------------------------------------------------- /docs/img/2-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/2-3.png -------------------------------------------------------------------------------- /docs/img/219120ca2794919935fe64d208dce73b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/219120ca2794919935fe64d208dce73b.jpg -------------------------------------------------------------------------------- /docs/img/22d09c2a3672ad86ceaf928c368c5c8e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/22d09c2a3672ad86ceaf928c368c5c8e.jpg -------------------------------------------------------------------------------- /docs/img/24e1f51105d3dfc35124d25d9b3b6348.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/24e1f51105d3dfc35124d25d9b3b6348.jpg -------------------------------------------------------------------------------- /docs/img/2616ce35cb39df1e77481c08cf41bdba.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/2616ce35cb39df1e77481c08cf41bdba.jpg -------------------------------------------------------------------------------- /docs/img/294616ae10dc3e6b98b6dd1f2faeafc7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/294616ae10dc3e6b98b6dd1f2faeafc7.jpg -------------------------------------------------------------------------------- /docs/img/2a4a832c349eb9fceb68880db3620e8b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/2a4a832c349eb9fceb68880db3620e8b.jpg -------------------------------------------------------------------------------- /docs/img/2a612119ee6d04f202b8e8cdaf101019.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/2a612119ee6d04f202b8e8cdaf101019.jpg -------------------------------------------------------------------------------- /docs/img/2a8aa0f7ee461e907d388c236969f203.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/2a8aa0f7ee461e907d388c236969f203.jpg -------------------------------------------------------------------------------- /docs/img/2e3c0d8a3206714d7be34978f181b50d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/2e3c0d8a3206714d7be34978f181b50d.jpg -------------------------------------------------------------------------------- /docs/img/2e7620847d331c0912cf9dbc85774b88.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/2e7620847d331c0912cf9dbc85774b88.jpg -------------------------------------------------------------------------------- /docs/img/3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/3-1.png -------------------------------------------------------------------------------- /docs/img/3-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/3-2.png -------------------------------------------------------------------------------- /docs/img/3-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/3-3.png -------------------------------------------------------------------------------- /docs/img/31eb8fd37277e9c61a92a5185e977206.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/31eb8fd37277e9c61a92a5185e977206.jpg -------------------------------------------------------------------------------- /docs/img/36725c695b1ecae996ff2107282cd111.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/36725c695b1ecae996ff2107282cd111.jpg -------------------------------------------------------------------------------- /docs/img/3761246072134f50d3d1c36bcc3489a7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/3761246072134f50d3d1c36bcc3489a7.jpg -------------------------------------------------------------------------------- /docs/img/37db3b06886ed2768df2d30778c78815.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/37db3b06886ed2768df2d30778c78815.jpg -------------------------------------------------------------------------------- /docs/img/3aa561a6bea80f25fc29d9cf0fda2294.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/3aa561a6bea80f25fc29d9cf0fda2294.jpg -------------------------------------------------------------------------------- /docs/img/3b5242f89b11fc74af01dcfb801a0709.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/3b5242f89b11fc74af01dcfb801a0709.jpg -------------------------------------------------------------------------------- /docs/img/3cbc7f203a5ce676e3242ecf64460fed.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/3cbc7f203a5ce676e3242ecf64460fed.jpg -------------------------------------------------------------------------------- /docs/img/3fc7b32eb5869167179da3af2be3df36.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/3fc7b32eb5869167179da3af2be3df36.jpg -------------------------------------------------------------------------------- /docs/img/401ed50e4b3669b9bbfd290e7ebbf77f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/401ed50e4b3669b9bbfd290e7ebbf77f.jpg -------------------------------------------------------------------------------- /docs/img/410212c35338c68b54571b0e714c2258.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/410212c35338c68b54571b0e714c2258.jpg -------------------------------------------------------------------------------- /docs/img/428c978ea70f50db7b8098daa01575bc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/428c978ea70f50db7b8098daa01575bc.jpg -------------------------------------------------------------------------------- /docs/img/475a8487849ba15ab087ef180770c61d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/475a8487849ba15ab087ef180770c61d.jpg -------------------------------------------------------------------------------- /docs/img/481382f507633c1cd9bf4869bb46a70d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/481382f507633c1cd9bf4869bb46a70d.jpg -------------------------------------------------------------------------------- /docs/img/48e76023438cc6c14af4dbd3b6c7242f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/48e76023438cc6c14af4dbd3b6c7242f.jpg -------------------------------------------------------------------------------- /docs/img/4ad791d1b9b247b0850a079da7710c49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/4ad791d1b9b247b0850a079da7710c49.jpg -------------------------------------------------------------------------------- /docs/img/4af6e2d380aa3ad9f9a0b1bba7042b5a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/4af6e2d380aa3ad9f9a0b1bba7042b5a.jpg -------------------------------------------------------------------------------- /docs/img/4cf4e0313f8a9e9d323fdf241c00c692.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/4cf4e0313f8a9e9d323fdf241c00c692.jpg -------------------------------------------------------------------------------- /docs/img/4e43bd60805eff5fc4f7ad0163dc79cd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/4e43bd60805eff5fc4f7ad0163dc79cd.jpg -------------------------------------------------------------------------------- /docs/img/4e86a8913f5b492400d112089d258b82.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/4e86a8913f5b492400d112089d258b82.jpg -------------------------------------------------------------------------------- /docs/img/5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/5-1.png -------------------------------------------------------------------------------- /docs/img/5-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/5-2.jpg -------------------------------------------------------------------------------- /docs/img/5-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/5-3.jpg -------------------------------------------------------------------------------- /docs/img/5-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/5-4.png -------------------------------------------------------------------------------- /docs/img/50d6afa4cc4ba105377e7840b31227b5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/50d6afa4cc4ba105377e7840b31227b5.jpg -------------------------------------------------------------------------------- /docs/img/5151d819eb3e8a310944e9d300e7a1e2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/5151d819eb3e8a310944e9d300e7a1e2.jpg -------------------------------------------------------------------------------- /docs/img/54638c6f90b0c3735c8bb0ef144c18ef.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/54638c6f90b0c3735c8bb0ef144c18ef.jpg -------------------------------------------------------------------------------- /docs/img/547dc6d4cf4b7c3b496c1b5aa8aca5e1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/547dc6d4cf4b7c3b496c1b5aa8aca5e1.jpg -------------------------------------------------------------------------------- /docs/img/56685a50eaca04dd545f41fc548c9055.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/56685a50eaca04dd545f41fc548c9055.jpg -------------------------------------------------------------------------------- /docs/img/581f27118a748732911374cb6ffc047b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/581f27118a748732911374cb6ffc047b.jpg -------------------------------------------------------------------------------- /docs/img/58840a03de9e398a7741a74a794db9bd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/58840a03de9e398a7741a74a794db9bd.jpg -------------------------------------------------------------------------------- /docs/img/5896b01ac384692bf9e5e60bb019fe40.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/5896b01ac384692bf9e5e60bb019fe40.jpg -------------------------------------------------------------------------------- /docs/img/598f5ee47260ec9135365901a144b946.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/598f5ee47260ec9135365901a144b946.jpg -------------------------------------------------------------------------------- /docs/img/59a54919f490228adab41a1439b6c86c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/59a54919f490228adab41a1439b6c86c.jpg -------------------------------------------------------------------------------- /docs/img/5e2286aab642a388a99a5ddf6f8f3fa4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/5e2286aab642a388a99a5ddf6f8f3fa4.jpg -------------------------------------------------------------------------------- /docs/img/5f24ad39e6714fd81ea9106bcd0d1abc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/5f24ad39e6714fd81ea9106bcd0d1abc.jpg -------------------------------------------------------------------------------- /docs/img/5f61f6ada8e62895878e098dfa140c26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/5f61f6ada8e62895878e098dfa140c26.jpg -------------------------------------------------------------------------------- /docs/img/6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-1.png -------------------------------------------------------------------------------- /docs/img/6-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-10.png -------------------------------------------------------------------------------- /docs/img/6-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-11.png -------------------------------------------------------------------------------- /docs/img/6-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-12.png -------------------------------------------------------------------------------- /docs/img/6-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-13.png -------------------------------------------------------------------------------- /docs/img/6-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-14.png -------------------------------------------------------------------------------- /docs/img/6-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-15.png -------------------------------------------------------------------------------- /docs/img/6-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-16.png -------------------------------------------------------------------------------- /docs/img/6-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-17.png -------------------------------------------------------------------------------- /docs/img/6-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-18.png -------------------------------------------------------------------------------- /docs/img/6-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-19.png -------------------------------------------------------------------------------- /docs/img/6-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-2.png -------------------------------------------------------------------------------- /docs/img/6-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-20.png -------------------------------------------------------------------------------- /docs/img/6-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-21.png -------------------------------------------------------------------------------- /docs/img/6-22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-22.png -------------------------------------------------------------------------------- /docs/img/6-23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-23.png -------------------------------------------------------------------------------- /docs/img/6-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-24.png -------------------------------------------------------------------------------- /docs/img/6-25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-25.png -------------------------------------------------------------------------------- /docs/img/6-26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-26.png -------------------------------------------------------------------------------- /docs/img/6-27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-27.png -------------------------------------------------------------------------------- /docs/img/6-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-28.png -------------------------------------------------------------------------------- /docs/img/6-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-29.png -------------------------------------------------------------------------------- /docs/img/6-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-3.png -------------------------------------------------------------------------------- /docs/img/6-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-30.png -------------------------------------------------------------------------------- /docs/img/6-31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-31.png -------------------------------------------------------------------------------- /docs/img/6-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-32.png -------------------------------------------------------------------------------- /docs/img/6-33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-33.png -------------------------------------------------------------------------------- /docs/img/6-34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-34.png -------------------------------------------------------------------------------- /docs/img/6-35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-35.png -------------------------------------------------------------------------------- /docs/img/6-36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-36.png -------------------------------------------------------------------------------- /docs/img/6-37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-37.png -------------------------------------------------------------------------------- /docs/img/6-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-4.png -------------------------------------------------------------------------------- /docs/img/6-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-5.png -------------------------------------------------------------------------------- /docs/img/6-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-6.png -------------------------------------------------------------------------------- /docs/img/6-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-7.png -------------------------------------------------------------------------------- /docs/img/6-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-8.png -------------------------------------------------------------------------------- /docs/img/6-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6-9.png -------------------------------------------------------------------------------- /docs/img/621eb5b2615ecc9898550422664219f6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/621eb5b2615ecc9898550422664219f6.jpg -------------------------------------------------------------------------------- /docs/img/628c62f5df1179ba1429e5fd9affb692.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/628c62f5df1179ba1429e5fd9affb692.jpg -------------------------------------------------------------------------------- /docs/img/62db30e6efedf81de7301650e413f9ad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/62db30e6efedf81de7301650e413f9ad.jpg -------------------------------------------------------------------------------- /docs/img/6503fba9094def20f7c2dbf2cee1f45c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6503fba9094def20f7c2dbf2cee1f45c.jpg -------------------------------------------------------------------------------- /docs/img/674cdf6c03134b3ab23ac48d009c2c5d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/674cdf6c03134b3ab23ac48d009c2c5d.jpg -------------------------------------------------------------------------------- /docs/img/68ca55dbe244757308359be97453de71.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/68ca55dbe244757308359be97453de71.jpg -------------------------------------------------------------------------------- /docs/img/6bf727fd86485dbbac83baabc11501fe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6bf727fd86485dbbac83baabc11501fe.jpg -------------------------------------------------------------------------------- /docs/img/6c007733cbb18e2dd4c4783cbd213a0b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/6c007733cbb18e2dd4c4783cbd213a0b.jpg -------------------------------------------------------------------------------- /docs/img/7203035bf18ecd403a241059ae979857.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/7203035bf18ecd403a241059ae979857.jpg -------------------------------------------------------------------------------- /docs/img/7221e81b49ef94eaaca9721cff85eab7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/7221e81b49ef94eaaca9721cff85eab7.jpg -------------------------------------------------------------------------------- /docs/img/722776e1934b6d14f68a80cba34a7d66.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/722776e1934b6d14f68a80cba34a7d66.jpg -------------------------------------------------------------------------------- /docs/img/7354718ee4fcb2ecae5723a05e7cd985.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/7354718ee4fcb2ecae5723a05e7cd985.jpg -------------------------------------------------------------------------------- /docs/img/7383719a4801ef36b5fa81b4aca74c83.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/7383719a4801ef36b5fa81b4aca74c83.jpg -------------------------------------------------------------------------------- /docs/img/740960f82b9ad13ad1bfdad9b2653e8d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/740960f82b9ad13ad1bfdad9b2653e8d.jpg -------------------------------------------------------------------------------- /docs/img/741ad656bc29942856373263ec2eff86.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/741ad656bc29942856373263ec2eff86.jpg -------------------------------------------------------------------------------- /docs/img/74f8b6ee68591e99df8825ce39d9fb43.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/74f8b6ee68591e99df8825ce39d9fb43.jpg -------------------------------------------------------------------------------- /docs/img/7688c95aa3b2eda78f134dbab8269ce5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/7688c95aa3b2eda78f134dbab8269ce5.jpg -------------------------------------------------------------------------------- /docs/img/769a95ba9ac96807a07d24af785428d2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/769a95ba9ac96807a07d24af785428d2.jpg -------------------------------------------------------------------------------- /docs/img/76a75a902976a282f37b429aac11aeac.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/76a75a902976a282f37b429aac11aeac.jpg -------------------------------------------------------------------------------- /docs/img/7aaea1b7b6832e80b3c50c34c14ad2a4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/7aaea1b7b6832e80b3c50c34c14ad2a4.jpg -------------------------------------------------------------------------------- /docs/img/7ac51b31279f72f207834354d12fe264.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/7ac51b31279f72f207834354d12fe264.jpg -------------------------------------------------------------------------------- /docs/img/7b8737e3e617a04b4e88a3fadaf84497.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/7b8737e3e617a04b4e88a3fadaf84497.jpg -------------------------------------------------------------------------------- /docs/img/7caefdaf19673946794a05e6e9b8cd30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/7caefdaf19673946794a05e6e9b8cd30.jpg -------------------------------------------------------------------------------- /docs/img/7cff540f9cbbd2c3a7a344194849c200.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/7cff540f9cbbd2c3a7a344194849c200.jpg -------------------------------------------------------------------------------- /docs/img/7df0f3db2886184c1a9ba002f2ee393b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/7df0f3db2886184c1a9ba002f2ee393b.jpg -------------------------------------------------------------------------------- /docs/img/7e4290636eac64cb2717852692dc891a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/7e4290636eac64cb2717852692dc891a.jpg -------------------------------------------------------------------------------- /docs/img/831ee85b962ad0678a02c0098bf76e5f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/831ee85b962ad0678a02c0098bf76e5f.jpg -------------------------------------------------------------------------------- /docs/img/83e40b8cce650105e5e9325182567f61.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/83e40b8cce650105e5e9325182567f61.jpg -------------------------------------------------------------------------------- /docs/img/8459c61db41c38138346bc70f0bf1955.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/8459c61db41c38138346bc70f0bf1955.jpg -------------------------------------------------------------------------------- /docs/img/85ffad94c131d99d3caf4889b9ad62fb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/85ffad94c131d99d3caf4889b9ad62fb.jpg -------------------------------------------------------------------------------- /docs/img/876280d2110b8a794f140e24467f616b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/876280d2110b8a794f140e24467f616b.jpg -------------------------------------------------------------------------------- /docs/img/87943c95825a864c0b672b31764c4515.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/87943c95825a864c0b672b31764c4515.jpg -------------------------------------------------------------------------------- /docs/img/8839f2182bcbe3d327adc8d24f8e2323.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/8839f2182bcbe3d327adc8d24f8e2323.jpg -------------------------------------------------------------------------------- /docs/img/88d60969e5869eb93f55cc9886c73bcb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/88d60969e5869eb93f55cc9886c73bcb.jpg -------------------------------------------------------------------------------- /docs/img/89036c56c487a2bf6cd7c09a81073ff5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/89036c56c487a2bf6cd7c09a81073ff5.jpg -------------------------------------------------------------------------------- /docs/img/897078873a9ca0b6c3f594f9a39f0a8c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/897078873a9ca0b6c3f594f9a39f0a8c.jpg -------------------------------------------------------------------------------- /docs/img/8a24c53d6add631048ea934239225e8d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/8a24c53d6add631048ea934239225e8d.jpg -------------------------------------------------------------------------------- /docs/img/8d3e4011c287f193803ac40550ad6d5d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/8d3e4011c287f193803ac40550ad6d5d.jpg -------------------------------------------------------------------------------- /docs/img/8d46f5640197aa56f280f35358781d71.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/8d46f5640197aa56f280f35358781d71.jpg -------------------------------------------------------------------------------- /docs/img/906247f1e253e818d146d190f069f6d4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/906247f1e253e818d146d190f069f6d4.jpg -------------------------------------------------------------------------------- /docs/img/907214087b3997cb4b3f1090ab6df057.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/907214087b3997cb4b3f1090ab6df057.jpg -------------------------------------------------------------------------------- /docs/img/913dc9f2031d54d789f5ffb9cca34e7a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/913dc9f2031d54d789f5ffb9cca34e7a.jpg -------------------------------------------------------------------------------- /docs/img/9358643a881b6a7c22a36b0fee81025c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/9358643a881b6a7c22a36b0fee81025c.jpg -------------------------------------------------------------------------------- /docs/img/93a3167cc667605fe7f42ccc8c2a757b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/93a3167cc667605fe7f42ccc8c2a757b.jpg -------------------------------------------------------------------------------- /docs/img/96b0e2357cf83ad7761be54e2fae900a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/96b0e2357cf83ad7761be54e2fae900a.jpg -------------------------------------------------------------------------------- /docs/img/96d2456e7d205f246a828e103b63dadf.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/96d2456e7d205f246a828e103b63dadf.jpg -------------------------------------------------------------------------------- /docs/img/972d0f384ba5cd9ccf73a1279401a7a5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/972d0f384ba5cd9ccf73a1279401a7a5.jpg -------------------------------------------------------------------------------- /docs/img/9c3de0c36e094e2028854ff2095a2fa2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/9c3de0c36e094e2028854ff2095a2fa2.jpg -------------------------------------------------------------------------------- /docs/img/9e28d690952a2e1ac45ed4cc7399748f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/9e28d690952a2e1ac45ed4cc7399748f.jpg -------------------------------------------------------------------------------- /docs/img/9e9423fb042a609862a7ff3f932ec2c8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/9e9423fb042a609862a7ff3f932ec2c8.jpg -------------------------------------------------------------------------------- /docs/img/a010cd94962f84cdbf0d90738098f91b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/a010cd94962f84cdbf0d90738098f91b.jpg -------------------------------------------------------------------------------- /docs/img/a08a2a0fa10f83dd3ac4d6a522cfac63.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/a08a2a0fa10f83dd3ac4d6a522cfac63.jpg -------------------------------------------------------------------------------- /docs/img/a120a915e5c15c938d05dea860748ef8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/a120a915e5c15c938d05dea860748ef8.jpg -------------------------------------------------------------------------------- /docs/img/a13188be15e2ac82686f1f589369a10b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/a13188be15e2ac82686f1f589369a10b.jpg -------------------------------------------------------------------------------- /docs/img/a2ad957f7b00a1f98d76654c789980ab.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/a2ad957f7b00a1f98d76654c789980ab.jpg -------------------------------------------------------------------------------- /docs/img/a3440f56634da5279c28fde96a0a1599.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/a3440f56634da5279c28fde96a0a1599.jpg -------------------------------------------------------------------------------- /docs/img/a4495b68746da3b7651783fe7ad43b8c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/a4495b68746da3b7651783fe7ad43b8c.jpg -------------------------------------------------------------------------------- /docs/img/a65f83358494936835dc0ec67e90d9a4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/a65f83358494936835dc0ec67e90d9a4.jpg -------------------------------------------------------------------------------- /docs/img/a905935fc7844a49e19d8d89ae14d9a9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/a905935fc7844a49e19d8d89ae14d9a9.jpg -------------------------------------------------------------------------------- /docs/img/ab3ba858f64515b244aaf4c65f86665b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/ab3ba858f64515b244aaf4c65f86665b.jpg -------------------------------------------------------------------------------- /docs/img/ac750b028724d27b4ecca932cf385ede.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/ac750b028724d27b4ecca932cf385ede.jpg -------------------------------------------------------------------------------- /docs/img/accc28eb3b77ebc243b6e81da3d37d95.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/accc28eb3b77ebc243b6e81da3d37d95.jpg -------------------------------------------------------------------------------- /docs/img/ad0e40cccb81f18ba9991557446e0bbc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/ad0e40cccb81f18ba9991557446e0bbc.jpg -------------------------------------------------------------------------------- /docs/img/aeabc0187ff6579f0cd1d504c33e3753.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/aeabc0187ff6579f0cd1d504c33e3753.jpg -------------------------------------------------------------------------------- /docs/img/b05cf3eb427137839b8a0b6f8285cd18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/b05cf3eb427137839b8a0b6f8285cd18.jpg -------------------------------------------------------------------------------- /docs/img/b42847ae3eed88fbeec5fa73a360efa7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/b42847ae3eed88fbeec5fa73a360efa7.jpg -------------------------------------------------------------------------------- /docs/img/b5d20d7c07cd53b9f307917142ca3bb4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/b5d20d7c07cd53b9f307917142ca3bb4.jpg -------------------------------------------------------------------------------- /docs/img/b6d2ac67e99c7000f7d106e19d1171ba.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/b6d2ac67e99c7000f7d106e19d1171ba.jpg -------------------------------------------------------------------------------- /docs/img/bbfe1461c481a9d20ccc0605674a3fed.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/bbfe1461c481a9d20ccc0605674a3fed.jpg -------------------------------------------------------------------------------- /docs/img/bca488c8e5140d58f991399136c7ae50.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/bca488c8e5140d58f991399136c7ae50.jpg -------------------------------------------------------------------------------- /docs/img/bceb7b0a84c054f8a1fc906eb4ec71e5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/bceb7b0a84c054f8a1fc906eb4ec71e5.jpg -------------------------------------------------------------------------------- /docs/img/bdc79463bac88ba093b02d27d14fae07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/bdc79463bac88ba093b02d27d14fae07.jpg -------------------------------------------------------------------------------- /docs/img/bf9732fdd8c8a78a7d7819df91bfaca1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/bf9732fdd8c8a78a7d7819df91bfaca1.jpg -------------------------------------------------------------------------------- /docs/img/bfe2e8c0e16d547d8a4478d30c08cdef.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/bfe2e8c0e16d547d8a4478d30c08cdef.jpg -------------------------------------------------------------------------------- /docs/img/c26ebd1e6b8f074dc4500bff1df154b6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/c26ebd1e6b8f074dc4500bff1df154b6.jpg -------------------------------------------------------------------------------- /docs/img/c38dbc9449b87fc58a45cc3ddf8829df.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/c38dbc9449b87fc58a45cc3ddf8829df.jpg -------------------------------------------------------------------------------- /docs/img/c4e4ed506f3af4f1b0cc30cc464a580a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/c4e4ed506f3af4f1b0cc30cc464a580a.jpg -------------------------------------------------------------------------------- /docs/img/c5c4d479e2ba2277ce6c597b3d5ae351.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/c5c4d479e2ba2277ce6c597b3d5ae351.jpg -------------------------------------------------------------------------------- /docs/img/c76354f46b330f4d4481d069ad9d70d7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/c76354f46b330f4d4481d069ad9d70d7.jpg -------------------------------------------------------------------------------- /docs/img/cb71552f439f179e838ed69dbbb0f474.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/cb71552f439f179e838ed69dbbb0f474.jpg -------------------------------------------------------------------------------- /docs/img/d1174e35147eba352e4616832eef473a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/d1174e35147eba352e4616832eef473a.jpg -------------------------------------------------------------------------------- /docs/img/d26b774dfc662e0341f420766b5cf56a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/d26b774dfc662e0341f420766b5cf56a.jpg -------------------------------------------------------------------------------- /docs/img/d2dc6763f8aaa1e4b1c7c45709bb2769.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/d2dc6763f8aaa1e4b1c7c45709bb2769.jpg -------------------------------------------------------------------------------- /docs/img/d328310df0f0ce78ed008227cf1b8dc9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/d328310df0f0ce78ed008227cf1b8dc9.jpg -------------------------------------------------------------------------------- /docs/img/d45796011254bc554dcdd9f0d8711d54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/d45796011254bc554dcdd9f0d8711d54.jpg -------------------------------------------------------------------------------- /docs/img/d85dd1811c07cbbff7bebf882747f96a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/d85dd1811c07cbbff7bebf882747f96a.jpg -------------------------------------------------------------------------------- /docs/img/d8ca168b843d3ac06f9c8da9700eca7d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/d8ca168b843d3ac06f9c8da9700eca7d.jpg -------------------------------------------------------------------------------- /docs/img/d968dfd7b4eccb1f662b88d45f179bce.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/d968dfd7b4eccb1f662b88d45f179bce.jpg -------------------------------------------------------------------------------- /docs/img/d9da1f91e8a29f0132c40a31cd8302ca.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/d9da1f91e8a29f0132c40a31cd8302ca.jpg -------------------------------------------------------------------------------- /docs/img/db14263d5a46988e6474e8428b2365c0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/db14263d5a46988e6474e8428b2365c0.jpg -------------------------------------------------------------------------------- /docs/img/db5d88d67ff62684a58369bd2e3c43c4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/db5d88d67ff62684a58369bd2e3c43c4.jpg -------------------------------------------------------------------------------- /docs/img/dd3e57783c8f887ec7b819bad1667466.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/dd3e57783c8f887ec7b819bad1667466.jpg -------------------------------------------------------------------------------- /docs/img/e16846fcc11aa7185b512f34e43f5692.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/e16846fcc11aa7185b512f34e43f5692.jpg -------------------------------------------------------------------------------- /docs/img/e179143703e1201fb546766484d6f4f2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/e179143703e1201fb546766484d6f4f2.jpg -------------------------------------------------------------------------------- /docs/img/e57bbe7c6a8374b52ffd4bd351d2c36e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/e57bbe7c6a8374b52ffd4bd351d2c36e.jpg -------------------------------------------------------------------------------- /docs/img/e58ec24d4e189ca3ac9d11de01f0a98a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/e58ec24d4e189ca3ac9d11de01f0a98a.jpg -------------------------------------------------------------------------------- /docs/img/e66d2d59979633fbfef7ae54c171e568.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/e66d2d59979633fbfef7ae54c171e568.jpg -------------------------------------------------------------------------------- /docs/img/e6cf9938988e74f590e478f06bfac9d2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/e6cf9938988e74f590e478f06bfac9d2.jpg -------------------------------------------------------------------------------- /docs/img/ea42ba941eaf867f81a63f74dc14fe5a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/ea42ba941eaf867f81a63f74dc14fe5a.jpg -------------------------------------------------------------------------------- /docs/img/eb52c823747b094ea0b78dc4048748c4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/eb52c823747b094ea0b78dc4048748c4.jpg -------------------------------------------------------------------------------- /docs/img/ecedb3799fe47c1597e06bd1f06823bc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/ecedb3799fe47c1597e06bd1f06823bc.jpg -------------------------------------------------------------------------------- /docs/img/f1ddf73005fa8555d5c0bc316058089b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/f1ddf73005fa8555d5c0bc316058089b.jpg -------------------------------------------------------------------------------- /docs/img/f24e9f4ca55766f4a38b12be778900ca.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/f24e9f4ca55766f4a38b12be778900ca.jpg -------------------------------------------------------------------------------- /docs/img/f452adf39ee9d4ba9c363d7cd150a23d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/f452adf39ee9d4ba9c363d7cd150a23d.jpg -------------------------------------------------------------------------------- /docs/img/f777a4a04df821c94d0f229ca540585b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/f777a4a04df821c94d0f229ca540585b.jpg -------------------------------------------------------------------------------- /docs/img/f8876785918c078f9c0c36fe0e132bf8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/f8876785918c078f9c0c36fe0e132bf8.jpg -------------------------------------------------------------------------------- /docs/img/f9825507e463920bb9d5e734ff3e0c54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/f9825507e463920bb9d5e734ff3e0c54.jpg -------------------------------------------------------------------------------- /docs/img/f9d1c942cf4ed774d04525894f74b995.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/f9d1c942cf4ed774d04525894f74b995.jpg -------------------------------------------------------------------------------- /docs/img/fb6227ef39eae29bd9f7a02d53759b03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/fb6227ef39eae29bd9f7a02d53759b03.jpg -------------------------------------------------------------------------------- /docs/img/fc28ba5ab17400ed866f879874e8d692.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/fc28ba5ab17400ed866f879874e8d692.jpg -------------------------------------------------------------------------------- /docs/img/fd4135e931adde735d676f8cf5c89f87.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/fd4135e931adde735d676f8cf5c89f87.jpg -------------------------------------------------------------------------------- /docs/img/qr_alipay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/qr_alipay.png -------------------------------------------------------------------------------- /docs/img/tex-0d61f8370cad1d412f80b84d143e1257.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-0d61f8370cad1d412f80b84d143e1257.gif -------------------------------------------------------------------------------- /docs/img/tex-1271f64c0c70bad9a2c94b2e0d6cb71a.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-1271f64c0c70bad9a2c94b2e0d6cb71a.gif -------------------------------------------------------------------------------- /docs/img/tex-3230a38ff882eb696c8ef04f5aac538d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-3230a38ff882eb696c8ef04f5aac538d.gif -------------------------------------------------------------------------------- /docs/img/tex-4144e097d2fa7a491cec2a7a4322f2bc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-4144e097d2fa7a491cec2a7a4322f2bc.gif -------------------------------------------------------------------------------- /docs/img/tex-43f7edc01dee06930303a27d4a437ff4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-43f7edc01dee06930303a27d4a437ff4.gif -------------------------------------------------------------------------------- /docs/img/tex-4c3e4d06b33339c2972345ab3b86e312.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-4c3e4d06b33339c2972345ab3b86e312.gif -------------------------------------------------------------------------------- /docs/img/tex-56e7f66d849d2a6c1a430d38565c2e35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-56e7f66d849d2a6c1a430d38565c2e35.gif -------------------------------------------------------------------------------- /docs/img/tex-7c1bc20c016ab66f2b43e99fbf038c45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-7c1bc20c016ab66f2b43e99fbf038c45.gif -------------------------------------------------------------------------------- /docs/img/tex-7fc56270e7a70fa81a5935b72eacbe29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-7fc56270e7a70fa81a5935b72eacbe29.gif -------------------------------------------------------------------------------- /docs/img/tex-8d01b3cac9bf4fcbde0c22b93e99aac0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-8d01b3cac9bf4fcbde0c22b93e99aac0.gif -------------------------------------------------------------------------------- /docs/img/tex-903aed24476309827ae2cec60c543ebb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-903aed24476309827ae2cec60c543ebb.gif -------------------------------------------------------------------------------- /docs/img/tex-970be4fa707cabaac0de6542fd12a90b.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-970be4fa707cabaac0de6542fd12a90b.gif -------------------------------------------------------------------------------- /docs/img/tex-980d35bc3500be6859da688d4bfb40d5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-980d35bc3500be6859da688d4bfb40d5.gif -------------------------------------------------------------------------------- /docs/img/tex-9d206c973ae429f0d3dfb23bbc31436b.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-9d206c973ae429f0d3dfb23bbc31436b.gif -------------------------------------------------------------------------------- /docs/img/tex-9d5ed678fe57bcca610140957afab571.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-9d5ed678fe57bcca610140957afab571.gif -------------------------------------------------------------------------------- /docs/img/tex-b86fc6b051f63d73de262d4c34e3a0a9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-b86fc6b051f63d73de262d4c34e3a0a9.gif -------------------------------------------------------------------------------- /docs/img/tex-cc197a2629da3459df32e6fa7c6f234f.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-cc197a2629da3459df32e6fa7c6f234f.gif -------------------------------------------------------------------------------- /docs/img/tex-cdfdac1d7a23b2ba11787c5e4e6f118d.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-cdfdac1d7a23b2ba11787c5e4e6f118d.gif -------------------------------------------------------------------------------- /docs/img/tex-d01f63b6ba39b3c0633a67018c4ca39e.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-d01f63b6ba39b3c0633a67018c4ca39e.gif -------------------------------------------------------------------------------- /docs/img/tex-d6e0ba2ab427ca9639fc8c8b0eeadb15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-d6e0ba2ab427ca9639fc8c8b0eeadb15.gif -------------------------------------------------------------------------------- /docs/img/tex-d989ada5606fd3d7adc85665693e8678.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-d989ada5606fd3d7adc85665693e8678.gif -------------------------------------------------------------------------------- /docs/img/tex-e362e2ca8fc64b381822c19a54c5c9ab.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apachecn/ds100-textbook-zh/258c42a541acadfdc8ecbf79fe45dc1c1b43765f/docs/img/tex-e362e2ca8fc64b381822c19a54c5c9ab.gif -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
now loading...
21 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /update.sh: -------------------------------------------------------------------------------- 1 | git add -A 2 | git commit -am "$(date "+%Y-%m-%d %H:%M:%S")" 3 | git push --------------------------------------------------------------------------------