{ "cells": [ { "cell_type": "code", "execution_count": 4, "id": "initial_id", "metadata": { "collapsed": true, "ExecuteTime": { "end_time": "2024-02-29T07:40:36.696135Z", "start_time": "2024-02-29T07:40:36.680744Z" } }, "outputs": [ { "data": { "text/plain": " id diagnosis radius_mean texture_mean perimeter_mean area_mean \\\n0 842302 M 17.99 10.38 122.80 1001.0 \n1 842517 M 20.57 17.77 132.90 1326.0 \n2 84300903 M 19.69 21.25 130.00 1203.0 \n3 84348301 M 11.42 20.38 77.58 386.1 \n4 84358402 M 20.29 14.34 135.10 1297.0 \n\n smoothness_mean compactness_mean concavity_mean concave points_mean \\\n0 0.11840 0.27760 0.3001 0.14710 \n1 0.08474 0.07864 0.0869 0.07017 \n2 0.10960 0.15990 0.1974 0.12790 \n3 0.14250 0.28390 0.2414 0.10520 \n4 0.10030 0.13280 0.1980 0.10430 \n\n ... radius_worst texture_worst perimeter_worst area_worst \\\n0 ... 25.38 17.33 184.60 2019.0 \n1 ... 24.99 23.41 158.80 1956.0 \n2 ... 23.57 25.53 152.50 1709.0 \n3 ... 14.91 26.50 98.87 567.7 \n4 ... 22.54 16.67 152.20 1575.0 \n\n smoothness_worst compactness_worst concavity_worst concave_points_worst \\\n0 0.1622 0.6656 0.7119 0.2654 \n1 0.1238 0.1866 0.2416 0.1860 \n2 0.1444 0.4245 0.4504 0.2430 \n3 0.2098 0.8663 0.6869 0.2575 \n4 0.1374 0.2050 0.4000 0.1625 \n\n symmetry_worst fractal_dimension_worst \n0 0.4601 0.11890 \n1 0.2750 0.08902 \n2 0.3613 0.08758 \n3 0.6638 0.17300 \n4 0.2364 0.07678 \n\n[5 rows x 32 columns]", "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
iddiagnosisradius_meantexture_meanperimeter_meanarea_meansmoothness_meancompactness_meanconcavity_meanconcave points_mean...radius_worsttexture_worstperimeter_worstarea_worstsmoothness_worstcompactness_worstconcavity_worstconcave_points_worstsymmetry_worstfractal_dimension_worst
0842302M17.9910.38122.801001.00.118400.277600.30010.14710...25.3817.33184.602019.00.16220.66560.71190.26540.46010.11890
1842517M20.5717.77132.901326.00.084740.078640.08690.07017...24.9923.41158.801956.00.12380.18660.24160.18600.27500.08902
284300903M19.6921.25130.001203.00.109600.159900.19740.12790...23.5725.53152.501709.00.14440.42450.45040.24300.36130.08758
384348301M11.4220.3877.58386.10.142500.283900.24140.10520...14.9126.5098.87567.70.20980.86630.68690.25750.66380.17300
484358402M20.2914.34135.101297.00.100300.132800.19800.10430...22.5416.67152.201575.00.13740.20500.40000.16250.23640.07678
\n

5 rows × 32 columns

\n
" }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "df = pd.read_csv('bc_data.csv', header=0)\n", "df.head()" ] }, { "cell_type": "code", "outputs": [ { "data": { "text/plain": " id radius_mean texture_mean perimeter_mean area_mean \\\ncount 5.690000e+02 569.000000 569.000000 569.000000 569.000000 \nmean 3.037183e+07 14.127292 19.289649 91.969033 654.889104 \nstd 1.250206e+08 3.524049 4.301036 24.298981 351.914129 \nmin 8.670000e+03 6.981000 9.710000 43.790000 143.500000 \n25% 8.692180e+05 11.700000 16.170000 75.170000 420.300000 \n50% 9.060240e+05 13.370000 18.840000 86.240000 551.100000 \n75% 8.813129e+06 15.780000 21.800000 104.100000 782.700000 \nmax 9.113205e+08 28.110000 39.280000 188.500000 2501.000000 \n\n smoothness_mean compactness_mean concavity_mean concave points_mean \\\ncount 569.000000 569.000000 569.000000 569.000000 \nmean 0.096360 0.104341 0.088799 0.048919 \nstd 0.014064 0.052813 0.079720 0.038803 \nmin 0.052630 0.019380 0.000000 0.000000 \n25% 0.086370 0.064920 0.029560 0.020310 \n50% 0.095870 0.092630 0.061540 0.033500 \n75% 0.105300 0.130400 0.130700 0.074000 \nmax 0.163400 0.345400 0.426800 0.201200 \n\n symmetry_mean ... radius_worst texture_worst perimeter_worst \\\ncount 569.000000 ... 569.000000 569.000000 569.000000 \nmean 0.181162 ... 16.269190 25.677223 107.261213 \nstd 0.027414 ... 4.833242 6.146258 33.602542 \nmin 0.106000 ... 7.930000 12.020000 50.410000 \n25% 0.161900 ... 13.010000 21.080000 84.110000 \n50% 0.179200 ... 14.970000 25.410000 97.660000 \n75% 0.195700 ... 18.790000 29.720000 125.400000 \nmax 0.304000 ... 36.040000 49.540000 251.200000 \n\n area_worst smoothness_worst compactness_worst concavity_worst \\\ncount 569.000000 569.000000 569.000000 569.000000 \nmean 880.583128 0.132369 0.254265 0.272188 \nstd 569.356993 0.022832 0.157336 0.208624 \nmin 185.200000 0.071170 0.027290 0.000000 \n25% 515.300000 0.116600 0.147200 0.114500 \n50% 686.500000 0.131300 0.211900 0.226700 \n75% 1084.000000 0.146000 0.339100 0.382900 \nmax 4254.000000 0.222600 1.058000 1.252000 \n\n concave_points_worst symmetry_worst fractal_dimension_worst \ncount 569.000000 569.000000 569.000000 \nmean 0.114606 0.290076 0.083946 \nstd 0.065732 0.061867 0.018061 \nmin 0.000000 0.156500 0.055040 \n25% 0.064930 0.250400 0.071460 \n50% 0.099930 0.282200 0.080040 \n75% 0.161400 0.317900 0.092080 \nmax 0.291000 0.663800 0.207500 \n\n[8 rows x 31 columns]", "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
idradius_meantexture_meanperimeter_meanarea_meansmoothness_meancompactness_meanconcavity_meanconcave points_meansymmetry_mean...radius_worsttexture_worstperimeter_worstarea_worstsmoothness_worstcompactness_worstconcavity_worstconcave_points_worstsymmetry_worstfractal_dimension_worst
count5.690000e+02569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000...569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000569.000000
mean3.037183e+0714.12729219.28964991.969033654.8891040.0963600.1043410.0887990.0489190.181162...16.26919025.677223107.261213880.5831280.1323690.2542650.2721880.1146060.2900760.083946
std1.250206e+083.5240494.30103624.298981351.9141290.0140640.0528130.0797200.0388030.027414...4.8332426.14625833.602542569.3569930.0228320.1573360.2086240.0657320.0618670.018061
min8.670000e+036.9810009.71000043.790000143.5000000.0526300.0193800.0000000.0000000.106000...7.93000012.02000050.410000185.2000000.0711700.0272900.0000000.0000000.1565000.055040
25%8.692180e+0511.70000016.17000075.170000420.3000000.0863700.0649200.0295600.0203100.161900...13.01000021.08000084.110000515.3000000.1166000.1472000.1145000.0649300.2504000.071460
50%9.060240e+0513.37000018.84000086.240000551.1000000.0958700.0926300.0615400.0335000.179200...14.97000025.41000097.660000686.5000000.1313000.2119000.2267000.0999300.2822000.080040
75%8.813129e+0615.78000021.800000104.100000782.7000000.1053000.1304000.1307000.0740000.195700...18.79000029.720000125.4000001084.0000000.1460000.3391000.3829000.1614000.3179000.092080
max9.113205e+0828.11000039.280000188.5000002501.0000000.1634000.3454000.4268000.2012000.304000...36.04000049.540000251.2000004254.0000000.2226001.0580001.2520000.2910000.6638000.207500
\n

8 rows × 31 columns

\n
" }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-02-29T07:40:42.053095Z", "start_time": "2024-02-29T07:40:42.023622Z" } }, "id": "fde21927bab2d623", "execution_count": 5 }, { "cell_type": "code", "outputs": [ { "data": { "text/plain": "" }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.info" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-02-29T07:40:50.658398Z", "start_time": "2024-02-29T07:40:50.649836Z" } }, "id": "33a333275b0acb62", "execution_count": 6 }, { "cell_type": "code", "outputs": [ { "data": { "text/plain": "(569, 32)" }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.shape" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-02-29T07:40:53.273389Z", "start_time": "2024-02-29T07:40:53.269960Z" } }, "id": "cf2a7dc50f963f7a", "execution_count": 7 }, { "cell_type": "code", "outputs": [ { "data": { "text/plain": " radius_mean texture_mean perimeter_mean area_mean smoothness_mean \\\n0 17.99 10.38 122.80 1001.0 0.11840 \n1 20.57 17.77 132.90 1326.0 0.08474 \n2 19.69 21.25 130.00 1203.0 0.10960 \n3 11.42 20.38 77.58 386.1 0.14250 \n4 20.29 14.34 135.10 1297.0 0.10030 \n\n compactness_mean concavity_mean concave points_mean symmetry_mean \\\n0 0.27760 0.3001 0.14710 0.2419 \n1 0.07864 0.0869 0.07017 0.1812 \n2 0.15990 0.1974 0.12790 0.2069 \n3 0.28390 0.2414 0.10520 0.2597 \n4 0.13280 0.1980 0.10430 0.1809 \n\n fractal_dimension_mean \n0 0.07871 \n1 0.05667 \n2 0.05999 \n3 0.09744 \n4 0.05883 ", "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
radius_meantexture_meanperimeter_meanarea_meansmoothness_meancompactness_meanconcavity_meanconcave points_meansymmetry_meanfractal_dimension_mean
017.9910.38122.801001.00.118400.277600.30010.147100.24190.07871
120.5717.77132.901326.00.084740.078640.08690.070170.18120.05667
219.6921.25130.001203.00.109600.159900.19740.127900.20690.05999
311.4220.3877.58386.10.142500.283900.24140.105200.25970.09744
420.2914.34135.101297.00.100300.132800.19800.104300.18090.05883
\n
" }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "features = df.iloc[:, 2:12]\n", "features.head()" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-02-29T08:59:29.955013Z", "start_time": "2024-02-29T08:59:29.946763Z" } }, "id": "de2f104bfe69a01", "execution_count": 8 }, { "cell_type": "code", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['M' 'M' 'M' 'M' 'M' 'M' 'M' 'M' 'M' 'M']\n" ] } ], "source": [ "import numpy as np\n", "\n", "diagnosis = df[\"diagnosis\"]\n", "diagnosis_array = np.ravel(diagnosis)\n", "print(diagnosis_array[:10])" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-02-29T09:01:30.707342Z", "start_time": "2024-02-29T09:01:30.703571Z" } }, "id": "2d9f42ce7a423f09", "execution_count": 11 }, { "cell_type": "code", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "训练集大小: (426, 10)\n", "测试集大小: (143, 10)\n" ] } ], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(features, diagnosis_array, test_size=0.25, random_state=42)\n", "print(\"训练集大小:\", X_train.shape)\n", "print(\"测试集大小:\", X_test.shape)" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-02-29T09:01:51.137834Z", "start_time": "2024-02-29T09:01:50.972999Z" } }, "id": "3b7128a6f067dbb5", "execution_count": 12 }, { "cell_type": "code", "outputs": [ { "data": { "text/plain": "KNeighborsClassifier()", "text/html": "
KNeighborsClassifier()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.neighbors import KNeighborsClassifier\n", "\n", "knn = KNeighborsClassifier()\n", "knn.fit(X_train, y_train)" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-02-29T09:04:21.655762Z", "start_time": "2024-02-29T09:04:21.649291Z" } }, "id": "b2e04debfef26d18", "execution_count": 14 }, { "cell_type": "code", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "训练集预测结果: ['B' 'B' 'B' 'M' 'M' 'M' 'B' 'M' 'B' 'B' 'B' 'B' 'M' 'M' 'B' 'B' 'B' 'B'\n", " 'B' 'B' 'B' 'M' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'B' 'B' 'M' 'B' 'B'\n", " 'B' 'B' 'B' 'B' 'M' 'M' 'M' 'B' 'B' 'M' 'B' 'M' 'B' 'B' 'B' 'B' 'M' 'M'\n", " 'B' 'M' 'B' 'B' 'B' 'M' 'B' 'M' 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'B' 'B' 'B'\n", " 'B' 'B' 'B' 'B' 'B' 'B' 'B' 'M' 'M' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'B'\n", " 'B' 'B' 'M' 'M' 'B' 'B' 'M' 'B' 'B' 'M' 'B' 'B' 'B' 'M' 'B' 'M' 'B' 'B'\n", " 'B' 'B' 'B' 'B' 'B' 'B' 'M' 'B' 'M' 'B' 'M' 'B' 'M' 'M' 'B' 'B' 'B' 'B'\n", " 'B' 'B' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'B'\n", " 'M' 'B' 'B' 'B' 'M' 'B' 'M' 'M' 'B' 'B' 'B' 'B' 'M' 'M' 'B' 'B' 'M' 'B'\n", " 'M' 'M' 'B' 'B' 'B' 'B' 'M' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'M' 'B' 'M'\n", " 'B' 'B' 'M' 'M' 'B' 'B' 'M' 'B' 'M' 'M' 'B' 'M' 'M' 'B' 'M' 'M' 'M' 'M'\n", " 'B' 'B' 'B' 'M' 'M' 'B' 'M' 'M' 'M' 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'B' 'B'\n", " 'M' 'M' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'M' 'B' 'B' 'M' 'M' 'B' 'M' 'B'\n", " 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'M' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'M'\n", " 'M' 'B' 'B' 'B' 'M' 'M' 'M' 'B' 'M' 'B' 'B' 'M' 'M' 'M' 'B' 'B' 'B' 'B'\n", " 'B' 'B' 'B' 'M' 'B' 'B' 'B' 'M' 'B' 'B' 'M' 'B' 'B' 'M' 'B' 'M' 'M' 'B'\n", " 'B' 'M' 'B' 'M' 'M' 'B' 'B' 'B' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'M'\n", " 'B' 'M' 'M' 'M' 'B' 'B' 'M' 'M' 'B' 'M' 'M' 'B' 'B' 'B' 'M' 'B' 'M' 'B'\n", " 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'M' 'M' 'M' 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'B'\n", " 'B' 'B' 'M' 'M' 'M' 'M' 'B' 'B' 'B' 'M' 'M' 'B' 'M' 'B' 'B' 'B' 'B' 'B'\n", " 'M' 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'M' 'M' 'M' 'M' 'B' 'B' 'M' 'M' 'M' 'B'\n", " 'B' 'M' 'M' 'M' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'M' 'M' 'B' 'B' 'B' 'B' 'B'\n", " 'B' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'B' 'B' 'M' 'M' 'B' 'B' 'M' 'M'\n", " 'M' 'B' 'M' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'B']\n", "测试集预测结果: ['B' 'M' 'M' 'B' 'B' 'M' 'M' 'M' 'B' 'B' 'B' 'M' 'B' 'M' 'B' 'M' 'B' 'B'\n", " 'B' 'M' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'B'\n", " 'M' 'B' 'M' 'B' 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'B' 'B' 'M' 'M' 'B' 'B'\n", " 'B' 'B' 'B' 'M' 'B' 'B' 'B' 'M' 'M' 'M' 'B' 'B' 'M' 'M' 'B' 'B' 'B' 'M'\n", " 'B' 'M' 'B' 'B' 'B' 'B' 'B' 'B' 'M' 'B' 'M' 'M' 'M' 'M' 'B' 'M' 'B' 'B'\n", " 'B' 'B' 'B' 'B' 'B' 'B' 'M' 'B' 'B' 'M' 'M' 'B' 'M' 'M' 'B' 'B' 'B' 'M'\n", " 'B' 'B' 'M' 'B' 'M' 'M' 'B' 'M' 'B' 'B' 'B' 'B' 'M' 'B' 'B' 'M' 'B' 'M'\n", " 'B' 'B' 'B' 'M' 'M' 'M' 'B' 'B' 'M' 'M' 'B' 'B' 'B' 'M' 'B' 'M' 'B']\n" ] } ], "source": [ "y_pred_train = knn.predict(X_train)\n", "y_pred_test = knn.predict(X_test)\n", "print(\"训练集预测结果:\", y_pred_train)\n", "print(\"测试集预测结果:\", y_pred_test)" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-02-29T09:05:17.922504Z", "start_time": "2024-02-29T09:05:17.904693Z" } }, "id": "cac5ad8ea65fbab3", "execution_count": 15 }, { "cell_type": "code", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'algorithm': 'auto', 'leaf_size': 30, 'metric': 'minkowski', 'metric_params': None, 'n_jobs': None, 'n_neighbors': 5, 'p': 2, 'weights': 'uniform'}\n" ] } ], "source": [ "print(knn.get_params())" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-02-29T09:05:48.533747Z", "start_time": "2024-02-29T09:05:48.530345Z" } }, "id": "34874ff1a197b193", "execution_count": 16 }, { "cell_type": "code", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "训练集准确率: 0.8967136150234741\n", "测试集准确率: 0.916083916083916\n" ] } ], "source": [ "from sklearn.metrics import accuracy_score\n", "\n", "train_accuracy = accuracy_score(y_train, y_pred_train)\n", "test_accuracy = accuracy_score(y_test, y_pred_test)\n", "print(\"训练集准确率:\", train_accuracy)\n", "print(\"测试集准确率:\", test_accuracy)" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-02-29T09:06:39.831762Z", "start_time": "2024-02-29T09:06:39.827707Z" } }, "id": "a3ffa5d01d23080b", "execution_count": 17 }, { "cell_type": "code", "outputs": [ { "data": { "text/plain": "
", "image/png": "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rcdsNtd7002r1YodO3Zgx44dlW6v6fiMjIxKI1oZGRkYNGgQWrVqVeXY2qaeA7YRF3t/zdUhtGvXrvD29sb69etrbMy+ur7GXIYSBIGXr8jjMOwQeQij0Viv3ckNBkO9nu+7777D1q1bsXfvXgwfPtxx+7V7Lnl7e1c728u+u/pnn32Gr7/+GkqlEpmZmdi4cWOVxx45cgTr16/HnDlzqlxSq+4568NkMlW7qODVn9H27dtx+PBhnD17Fnv27MFbb73luO+NN96oMupiDy41zW6zWq2oqKioFNhEUXSEj0ceeQQrV67EiRMn8Oabb1Y6VhRF/N///R9SU1MxevToOt+f1Wpt1GgekRwx7BB5CPusoroUFxfX63FhYWHYs2cPoqOj8cADDzS4nilTpjguUdkX1Lte69atq/dj+/btW+nST0BAAObOnVspiPj7+yM5ORldunTBa6+9hnvuuafSc1w7q8welOyjNvXxyiuvVPr5zjvvRHR0tOM5QkNDsW3bNgiCgL///hujR4+u13T8ioqKegc/IrnjrudE1CiiKEIUxTr7d4iIpMawQ0RERLLGf5IRERGRrDHsEBERkawx7BAREZGsMewQERGRrDHsEBERkawx7BAREZGscVHBaxQUlIKT8V2bIAAtWvjzXLkJni/3wXPlPniubOyfQ10Ydq4hivDoPzjuhOfKvfB8uQ+eK/fBc1U/vIxFREREssawQ0RERLLGsENERESyxrBDREREssawQ0RERLLGsENERESyxrBDREREssawQ0RERLLGsENERESyxrBDREREssawQ0RERLLGsENERESyxrBDdFlqTilKDCapyyAioibGsEME4MBfhRi75ghe3p4mdSlERNTEGHaIAGw4egEAcCi7CFZRlLgaIiJqSgw75PHy9Ub890wBAEBvtOB8sUHiioiIqCkx7JDH23Y8B5arBnNO5eqkK4aIiJocww55NFEUsfnPiwCAQC8VAIYdIiK5Ydghj/bH+RKcvVQOL5UCY3u1AcCwQ0QkNww75NFS/swBANwZG4abogIBAKdy9VKWRERETYxhhzxWmdGCnafyAAAju7ZExzBfCAAK9Ebk643SFkdERE2GYYc81q60PJSZLGgT5IUbWwfAW61EuxBvALyURUQkJww75LFSLjcmj+jaEoIgAABiw/0AAGkMO0REssGwQx7pbGEZ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vh6Lvk8HADxxa1v06RAicUVERETyxLAjAb3RjBc3n4DBbMUt7YLw5G3tpC6JiIhIthh2mpkoilj0fTrOXipHuJ8GC+6Jg1LBhQOJiIichWGnma0/eh7fn8qDUiFg0fDOCPbRSF0SERGRrDHsNKM/L5TgrT22DT6n3NEBCa0DJa6IiIhI/hh2mklRuQlJKSdhtooY3CkUj/RoLXVJREREHoFhpxlYRRHztqUip7QCbYO9MefuTtzgk4iIqJkw7DSDT/6XhQN/XYJWZdvg00+rkrokIiIij8Gw42S/nL2ElT+fBQDMvLMjYsJ8Ja6IiIjIszDsOFFOaQXmbE2FCOC+bi0xrEuE1CURERF5HIYdJ1pz6ByKyk2IDffD84NipC6HiIjII7F5xIkGdwxFqcGEiX3bQ6tiriQiIpICw44T3RgViBujuJYOERGRlDjcQERERLLGsENERESyxrBDREREssawQ0RERLLGsENERESyxrBDREREssawQ0RERLLGsENERESyxrBDREREssawQ0RERLLGsENERESyxrBDREREssawQ0RERLLGsENERESyppK6AFcjCFJXQHWxnyOeK/fA8+U+eK7cB8+VTX3fvyCKoujcUoiIiIikw8tYREREJGsMO0RERCRrDDtEREQkaww7REREJGsMO0RERCRrDDtEREQkaww7REREJGsMO0RERCRrDDtEREQkaww7ANLS0pCYmIhevXphyZIl4KLSrmvhwoWIjY11/HfXXXdJXRJdo7CwEIMGDcK5c+cct/E75pqqO1f8jrmmH374AYMHD0Z8fDzuvfdeZGRkAOB3q748PuwYjUZMmjQJXbp0wcaNG5GRkYFNmzZJXRbV4M8//8TKlStx8OBBHDx4EN98843UJdFVCgsLMWnSJPz999+O2/gdc03VnSuA3zFXlJWVhVmzZmHGjBnYu3cv2rdvj9mzZ/O71QAeH3b27t0LnU6HmTNnom3btpg+fTo2bNggdVlUDbPZjPT0dPTs2RMBAQEICAiAn5+f1GXRVaZPn47hw4dXuo3fMddU3bnid8w1ZWRkYMaMGbjnnnsQGhqKRx55BCdPnuR3qwE8PuykpqYiISEB3t7eAIDY2FjH8CC5lrS0NFitVtx3333o3r07nnjiCZw/f17qsugqCxYswLhx4yrdxu+Ya6ruXPE75poGDhyI0aNHO37OzMxEu3bt+N1qAI8POzqdDlFRUY6fBUGAQqFAcXGxhFVRdU6fPo0OHTpg6dKl2Lx5M1QqFebOnSt1WXSVNm3aVLmN3zHXVN254nfM9RmNRnz66ad4+OGH+d1qAI8PO0qlEhqNptJtWq0WBoNBooqoJiNHjsSmTZtw0003oX379pg/fz5+/vln6HQ6qUujWvA75j74HXN97777Lry9vTFq1Ch+txrA48NOYGAgCgsLK92m1+uhVqslqojqq0WLFrBarcjNzZW6FKoFv2Pui98x13LgwAF88cUXeOONN6BWq/ndagCPDzvdunXD0aNHHT9nZ2fDaDQiMDBQuqKoWkuWLEFKSorj5yNHjkChUCAyMlLCqqgu/I65D37HXFd2djZmzJiBefPmISYmBgC/Ww3h8WGnV69e0Ol02LhxIwBgxYoV6NOnD5RKpcSV0bXi4uLw9ttv48CBA9i/fz/mz5+P++67z9GcR66J3zH3we+YazIYDJg0aRIGDx6Mu+66C3q9Hnq9Hj179uR3q54EkSsQYdeuXZgxYwa0Wi0UCgVWr17tSM7kWt544w2sXbsWSqUSI0aMwPTp0+Hj4yN1WXSN2NhY7Nq1y9E8ye+Y67r2XPE75np++OEHPPPMM1Vu37VrF06dOsXvVj0w7FyWl5eH48ePIyEhAcHBwVKXQyQ7/I4ROQe/W3Vj2CEiIiJZ8/ieHSIiIpI3hh0iIiKSNYYdIiIikjWGHSKStaKioko/WywWlJaWSlMMEUmCYYeIZG306NH4/PPPHT+fO3cOPXv2RHZ2toRVEVFzUkldABFRY/3yyy+YOXMmdu/eXe39f/zxBy5duoRWrVrhjjvugEqlgtlsBgA8/vjjAGwjPffeey+mT5/ebHUTUfNi2CEi2XrvvfeQmJiIgQMHon///lCpVPjtt98wdepUR0Aym83gChxE8sawQ0Sy9PPPP2PPnj3o3bs3lEol1q5di02bNkGn06GkpAQPPPAAAOD+++/H2LFjJa6WiJyJYYeIZKGsrAxjxozBoEGDMG7cOMyZMwehoaGO+wsKCtCnTx88//zzjttWrlxZZddoIpIfhh0icnsWiwXTp09Hly5dMHnyZOzcuRMtW7ZEbGys4zEKhQJff/01duzY4bitpKQEY8aMkaJkImpGDDtE5PYWLlyIX375BT///DMA4K677sJtt92GN998s9LjRo8eXWVkp6KiollrJaLmx7BDRG7t/PnzOHbsGLp3745169Y5Zln5+flVeeyGDRuwZ88ex8+XLl3Cww8/3FylEpFEGHaIyK35+/tj5cqVOHfuHCZOnIjExMRqgw4APPjggxzZIfJADDtE5Nb8/f0REhKCkJAQ3HjjjVi1ahWmTZtW7WM5skPkmRh2iEg2pk6dikceeQSPPfYYwsPDYbFYYLFYYDQaAdQ8smM0GqFWqyEIglSlE5ETCSJX0yIimZo1axbCw8Oxbt06aDQaKBRVd8gRRRFGoxFbt25FUFBQ8xdJRE7HsENERESyxo1AiYiISNYYdoiIiEjWGHaIiIhI1hh2iIiISNYYdoiIiEjWGHaIiIhI1hh2iIiISNYYdoiIiEjWGHaIiIhI1hh2iIiISNb+Hxz6ORFwnkHJAAAAAElFTkSuQmCC" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "from pylab import mpl\n", "\n", "mpl.rcParams[\"font.sans-serif\"] = [\"SimHei\"]\n", "\n", "k_values = range(1, 23)\n", "accuracies = []\n", "for k in k_values:\n", " knn = KNeighborsClassifier(n_neighbors=k)\n", " knn.fit(X_train, y_train)\n", " pred = knn.predict(X_test)\n", " accuracies.append(accuracy_score(y_test, pred))\n", "plt.plot(k_values, accuracies)\n", "plt.xlabel('k值')\n", "plt.ylabel('准确率')\n", "plt.title('不同k值下的准确率')\n", "plt.show()" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-02-29T09:20:26.178865Z", "start_time": "2024-02-29T09:20:25.994659Z" } }, "id": "42ff8fb694530848", "execution_count": 23 }, { "cell_type": "code", "outputs": [], "source": [], "metadata": { "collapsed": false }, "id": "d96ff8b92c302f60" } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }