From a9488869b56e94d17ee89b008c9f71a871e04a21 Mon Sep 17 00:00:00 2001 From: ftc Date: Tue, 5 Mar 2024 10:28:46 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E4=B9=9D=20=E8=81=9A?= =?UTF-8?q?=E7=B1=BB=E5=88=86=E6=9E=90--k-means=20=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day6/k-means 算法.ipynb | 397 ++++++++++++++++++++++++++++++++++++++++ day6/protein.txt | 26 +++ 2 files changed, 423 insertions(+) create mode 100644 day6/k-means 算法.ipynb create mode 100644 day6/protein.txt diff --git a/day6/k-means 算法.ipynb b/day6/k-means 算法.ipynb new file mode 100644 index 0000000..dba4247 --- /dev/null +++ b/day6/k-means 算法.ipynb @@ -0,0 +1,397 @@ +{ + "cells": [ + { + "cell_type": "code", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Country RedMeat WhiteMeat Eggs Milk Fish Cereals Starch \\\n", + "0 Albania 10.1 1.4 0.5 8.9 0.2 42.3 0.6 \n", + "1 Austria 8.9 14.0 4.3 19.9 2.1 28.0 3.6 \n", + "2 Belgium 13.5 9.3 4.1 17.5 4.5 26.6 5.7 \n", + "3 Bulgaria 7.8 6.0 1.6 8.3 1.2 56.7 1.1 \n", + "4 Czechoslovakia 9.7 11.4 2.8 12.5 2.0 34.3 5.0 \n", + "\n", + " Nuts Fr&Veg \n", + "0 5.5 1.7 \n", + "1 1.3 4.3 \n", + "2 2.1 4.0 \n", + "3 3.7 4.2 \n", + "4 1.1 4.0 \n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.cluster import KMeans\n", + "from matplotlib import pyplot as plt\n", + "\n", + "data = pd.read_table('protein.txt')\n", + "print(data.head())" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-05T00:49:48.677414Z", + "start_time": "2024-03-05T00:49:46.173032Z" + } + }, + "id": "4edb4edc0d34ad7d", + "execution_count": 1 + }, + { + "cell_type": "code", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " RedMeat WhiteMeat Eggs Milk Fish Cereals \\\n", + "count 25.000000 25.000000 25.000000 25.000000 25.000000 25.000000 \n", + "mean 9.828000 7.896000 2.936000 17.112000 4.284000 32.248000 \n", + "std 3.347078 3.694081 1.117617 7.105416 3.402533 10.974786 \n", + "min 4.400000 1.400000 0.500000 4.900000 0.200000 18.600000 \n", + "25% 7.800000 4.900000 2.700000 11.100000 2.100000 24.300000 \n", + "50% 9.500000 7.800000 2.900000 17.600000 3.400000 28.000000 \n", + "75% 10.600000 10.800000 3.700000 23.300000 5.800000 40.100000 \n", + "max 18.000000 14.000000 4.700000 33.700000 14.200000 56.700000 \n", + "\n", + " Starch Nuts Fr&Veg \n", + "count 25.000000 25.000000 25.000000 \n", + "mean 4.276000 3.072000 4.136000 \n", + "std 1.634085 1.985682 1.803903 \n", + "min 0.600000 0.700000 1.400000 \n", + "25% 3.100000 1.500000 2.900000 \n", + "50% 4.700000 2.400000 3.800000 \n", + "75% 5.700000 4.700000 4.900000 \n", + "max 6.500000 7.800000 7.900000 \n" + ] + } + ], + "source": [ + "print(data.describe())" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-05T00:50:09.898400Z", + "start_time": "2024-03-05T00:50:09.886369Z" + } + }, + "id": "ba6825f39b388e3e", + "execution_count": 2 + }, + { + "cell_type": "code", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 25 entries, 0 to 24\n", + "Data columns (total 10 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Country 25 non-null object \n", + " 1 RedMeat 25 non-null float64\n", + " 2 WhiteMeat 25 non-null float64\n", + " 3 Eggs 25 non-null float64\n", + " 4 Milk 25 non-null float64\n", + " 5 Fish 25 non-null float64\n", + " 6 Cereals 25 non-null float64\n", + " 7 Starch 25 non-null float64\n", + " 8 Nuts 25 non-null float64\n", + " 9 Fr&Veg 25 non-null float64\n", + "dtypes: float64(9), object(1)\n", + "memory usage: 2.1+ KB\n", + "None\n" + ] + } + ], + "source": [ + "print(data.info())" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-05T00:50:15.742222Z", + "start_time": "2024-03-05T00:50:15.735191Z" + } + }, + "id": "65cbd3a6ae745f47", + "execution_count": 3 + }, + { + "cell_type": "code", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(25, 10)\n" + ] + } + ], + "source": [ + "print(data.shape)" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-05T00:50:26.715814Z", + "start_time": "2024-03-05T00:50:26.712916Z" + } + }, + "id": "9f170bbf7a5f86df", + "execution_count": 4 + }, + { + "cell_type": "code", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Country 0\n", + "RedMeat 0\n", + "WhiteMeat 0\n", + "Eggs 0\n", + "Milk 0\n", + "Fish 0\n", + "Cereals 0\n", + "Starch 0\n", + "Nuts 0\n", + "Fr&Veg 0\n", + "dtype: int64\n" + ] + } + ], + "source": [ + "print(data.isnull().sum())" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-05T00:50:32.093337Z", + "start_time": "2024-03-05T00:50:32.090191Z" + } + }, + "id": "3067c1ff24677acd", + "execution_count": 5 + }, + { + "cell_type": "code", + "outputs": [], + "source": [ + "data = data.drop('Country', axis=1)" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-05T00:50:46.476378Z", + "start_time": "2024-03-05T00:50:46.471822Z" + } + }, + "id": "113a961ee8ff4769", + "execution_count": 6 + }, + { + "cell_type": "code", + "outputs": [], + "source": [ + "scaler = StandardScaler()\n", + "data = scaler.fit_transform(data)" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-05T00:50:56.990418Z", + "start_time": "2024-03-05T00:50:56.986097Z" + } + }, + "id": "da24f638b62a780", + "execution_count": 7 + }, + { + "cell_type": "code", + "outputs": [ + { + "data": { + "text/plain": "KMeans(n_clusters=5)", + "text/html": "
KMeans(n_clusters=5)
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": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n_clusters = 5\n", + "model = KMeans(n_clusters=n_clusters)\n", + "model.fit(data)" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-05T00:51:17.145065Z", + "start_time": "2024-03-05T00:51:16.648682Z" + } + }, + "id": "93de3baf975bc253", + "execution_count": 8 + }, + { + "cell_type": "code", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1 4 0 1 4 0 4 0 0 2 4 0 2 4 0 4 3 1 3 0 0 0 4 0 1]\n" + ] + } + ], + "source": [ + "labels = model.labels_\n", + "print(labels)" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-05T00:51:30.636157Z", + "start_time": "2024-03-05T00:51:30.633595Z" + } + }, + "id": "2db63e40ff36b593", + "execution_count": 9 + }, + { + "cell_type": "code", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "轮廓系数: [0.3036595713561536, 0.23233325166144222, 0.2104269037375903, 0.24285078991354447, 0.20388602393367566, 0.23676911929424393, 0.20851411948151122, 0.12524582715513893, 0.20008371020336196, 0.1686016265506684, 0.19507903753693767, 0.08868908365262629, 0.15587212901360123, 0.1552312722591179, 0.16563060835047913, 0.1212293525819407, 0.1333895139697897, 0.11686658907318424, 0.06694307972379444]\n" + ] + } + ], + "source": [ + "from sklearn.metrics import silhouette_score\n", + "\n", + "silhouette_scores = []\n", + "for k in range(2, 21):\n", + " model = KMeans(n_clusters=k)\n", + " model.fit(data)\n", + " labels = model.labels_\n", + " silhouette_scores.append(silhouette_score(data, labels))\n", + "print(\"轮廓系数:\", silhouette_scores)" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-05T02:06:33.091551Z", + "start_time": "2024-03-05T02:06:33.036461Z" + } + }, + "id": "67f5e8d8bb1e239b", + "execution_count": 11 + }, + { + "cell_type": "code", + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "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kmKPcG3m66+/xrBhwxAZGdns444fP46RI0di586d2Lx5M7Zs2YI333zTPkG2w4oVK/DII480+lhaWhoSExPh7u4OwFinkJGR0eK10tLSMH78ePP7jv7zj4qKavbzlt7zQMe776/0c2/LPQ90rPu+pZ+5pfc70LHu+WnTpuH+++83v3/8+HH06NHD8e91q6dQZJGnnnpKjI+PF3U6Xaue99dff4n+/v42isp2vvzyS3Hw4MHi7t27xczMTHHq1KmNMvormTFjhvjaa6+Z36+srBTVarWtQ7WphIQEccOGDa1+3urVq8XBgwfbICLbwCV/8T722GPigw8+2OjzAQEBLa5YDBo0SPzuu+/M7x8+fNii1RGpoYm/9tt6z4tix7nvL33tbbnnRbFj3vdN/czber+LYse557VarRgTEyO+//77Dn+vc1q6BP7880+899572LNnD1xcXFr13KCgIBQXF0Or1Ureprs1Zs6ciZkzZ5rff//99xEVFQWNRtPk9FyFQtHoNbq6uqK6utrmsdpKVlYWsrKyMHHixFY/NygoCHl5eTaIyvb+/nMELv4sfX19LX5eR/75t+eeBzrmfd+Wex5wnp97e+53oOPc8y+88AI8PDwwZ84cPPvssw59r3NLy86ys7Nxxx134L333kPfvn1bfPxtt92GnTt3mt9PSkpCly5dOsw/ek0JCgqCwWDAuXPnmnyMn58fCgsLze9XVFRAqVTaIzyb+O677zBt2jSLfuENHz4cOTk55veTkpIQERFhy/Bs5u8/R8Cyn6Wz/Pxbe88DznnfW3LPA87zc2/N/Q50zHvelMh//fXXcHFxcfh7nQmPHdXU1GDatGm4/vrrceONN6KyshKVlZUQRREajQZ1dXWXPad///549NFHsXPnTqxbtw6LFi3CvHnzJIi+fRYuXIivv/7a/H5SUhJkMhnCw8ObfE5CQgKSkpLM76empiI0NNSmcdrSpk2bMHbs2EYfKysrg16vv+yxsbGxmDt3Lvbu3YvVq1fjjTfe6JA/d+Dyn2N2dja0Wi38/Pxa9byO+PNv7p4H4NT3fVvuecA5fu7Ale93wHnu+Ssl8g5/r1t9k4yatG7dukY9KUxv2dnZYkREhLh27drLnqPT6cTZs2eLHh4eYnBwsLh48WKxrq7O/sG30xdffCFGRUWJv//+u7h582axZ8+e4r333iuK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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib\n", + "matplotlib.rcParams['font.sans-serif']=['SimHei'] \n", + "matplotlib.rcParams['axes.unicode_minus']=False \n", + "\n", + "plt.plot(range(2, 21), silhouette_scores)\n", + "plt.xlabel('聚类簇数')\n", + "plt.ylabel('轮廓系数')\n", + "plt.show()" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-05T02:07:28.497650Z", + "start_time": "2024-03-05T02:07:28.436445Z" + } + }, + "id": "dbc746f4298b5e87", + "execution_count": 12 + }, + { + "cell_type": "code", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0 1 1 0 1 1 1 1 1 0 0 1 0 1 1 1 1 0 1 1 1 1 1 1 0]\n" + ] + } + ], + "source": [ + "best_k = np.argmax(silhouette_scores) + 2\n", + "model = KMeans(n_clusters=best_k)\n", + "model.fit(data)\n", + "labels = model.labels_\n", + "\n", + "print(labels)" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-03-05T02:07:31.958943Z", + "start_time": "2024-03-05T02:07:31.952689Z" + } + }, + "id": "7aea45760fdd0885", + "execution_count": 13 + }, + { + "cell_type": "code", + "outputs": [], + "source": [], + "metadata": { + "collapsed": false + }, + "id": "de42042bf9cba49f" + } + ], + "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 +} diff --git a/day6/protein.txt b/day6/protein.txt new file mode 100644 index 0000000..9a5086a --- /dev/null +++ b/day6/protein.txt @@ -0,0 +1,26 @@ +Country RedMeat WhiteMeat Eggs Milk Fish Cereals Starch Nuts Fr&Veg +Albania 10.1 1.4 0.5 8.9 0.2 42.3 0.6 5.5 1.7 +Austria 8.9 14.0 4.3 19.9 2.1 28.0 3.6 1.3 4.3 +Belgium 13.5 9.3 4.1 17.5 4.5 26.6 5.7 2.1 4.0 +Bulgaria 7.8 6.0 1.6 8.3 1.2 56.7 1.1 3.7 4.2 +Czechoslovakia 9.7 11.4 2.8 12.5 2.0 34.3 5.0 1.1 4.0 +Denmark 10.6 10.8 3.7 25.0 9.9 21.9 4.8 0.7 2.4 +E Germany 8.4 11.6 3.7 11.1 5.4 24.6 6.5 0.8 3.6 +Finland 9.5 4.9 2.7 33.7 5.8 26.3 5.1 1.0 1.4 +France 18.0 9.9 3.3 19.5 5.7 28.1 4.8 2.4 6.5 +Greece 10.2 3.0 2.8 17.6 5.9 41.7 2.2 7.8 6.5 +Hungary 5.3 12.4 2.9 9.7 0.3 40.1 4.0 5.4 4.2 +Ireland 13.9 10.0 4.7 25.8 2.2 24.0 6.2 1.6 2.9 +Italy 9.0 5.1 2.9 13.7 3.4 36.8 2.1 4.3 6.7 +Netherlands 9.5 13.6 3.6 23.4 2.5 22.4 4.2 1.8 3.7 +Norway 9.4 4.7 2.7 23.3 9.7 23.0 4.6 1.6 2.7 +Poland 6.9 10.2 2.7 19.3 3.0 36.1 5.9 2.0 6.6 +Portugal 6.2 3.7 1.1 4.9 14.2 27.0 5.9 4.7 7.9 +Romania 6.2 6.3 1.5 11.1 1.0 49.6 3.1 5.3 2.8 +Spain 7.1 3.4 3.1 8.6 7.0 29.2 5.7 5.9 7.2 +Sweden 9.9 7.8 3.5 24.7 7.5 19.5 3.7 1.4 2.0 +Switzerland 13.1 10.1 3.1 23.8 2.3 25.6 2.8 2.4 4.9 +UK 17.4 5.7 4.7 20.6 4.3 24.3 4.7 3.4 3.3 +USSR 9.3 4.6 2.1 16.6 3.0 43.6 6.4 3.4 2.9 +W Germany 11.4 12.5 4.1 18.8 3.4 18.6 5.2 1.5 3.8 +Yugoslavia 4.4 5.0 1.2 9.5 0.6 55.9 3.0 5.7 3.2 \ No newline at end of file