{ "cells": [ { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from sklearn.cluster import KMeans\n", "from sklearn.mixture import GaussianMixture\n", "from sklearn.decomposition import PCA\n", "import matplotlib.cm as cm\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "raw_data = np.loadtxt('EEG_feature.txt')\n", "# print(raw_data.shape)\n", "subject_video_label = np.loadtxt('subject_video.txt')\n", "#print(subject_video_label[:,0])\n", "valence_arousal_label = np.loadtxt('valence_arousal_label.txt')" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.662445447924595\n" ] } ], "source": [ "pca = PCA(n_components=2)\n", "out = pca.fit_transform(raw_data)\n", "# print(out.shape)\n", "# print(pca.explained_variance_ratio_)\n", "print(sum(pca.explained_variance_ratio_))" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "class cluster_eval(object):\n", " def _dist(self, x, y):\n", " return np.sum((x - y) ** 2) ** 0.5\n", " def __init__(self, raw_data):\n", " self.raw_data = raw_data\n", " self.dis = [[self._dist(raw_data[i], raw_data[j]) for j in range(i)] for i in range(len(raw_data))]\n", " def eval(self, label, centers, clusters):\n", " self.clu_label = [[] for i in range(clusters)]\n", " for i in range(len(label)):\n", " self.clu_label[label[i]].append(i)\n", " centers = [np.mean(self.raw_data[self.clu_label[i]], axis=0) for i in range(clusters)]\n", " # avg, diam\n", " self.clu_avg = [0 for i in range(clusters)]\n", " self.diam = [0 for i in range(clusters)]\n", " for i in range(clusters):\n", " clu_num = len(self.clu_label[i])\n", " for j in range(clu_num):\n", " for k in range(j):\n", " jk_dis = self.dis[self.clu_label[i][j]][self.clu_label[i][k]]\n", " self.clu_avg[i] += jk_dis\n", " self.diam[i] = max(self.diam[i], jk_dis)\n", " self.clu_avg[i] *= 2 / (clu_num * (clu_num - 1))\n", " # dcen\n", " self.cen = [[self._dist(centers[i], centers[j]) for j in range(i)] for i in range(clusters)]\n", " # dmin\n", " self.dmin = [[j for j in i] for i in self.cen]\n", " for i in range(clusters):\n", " for j in range(i):\n", " for k in self.clu_label[i]:\n", " for l in self.clu_label[j]:\n", " self.dmin[i][j] = min(self.dmin[i][j], self.dis[max(k, l)][min(k, l)])\n", " # DBI\n", " self.DBI = sum(max(self.cen[max(i, j)][min(i, j)] for j in list(range(i)) + list(range(i + 1, clusters))) for i in range(clusters)) / clusters\n", " # print(self.DBI)\n", " # Dunn\n", " self.Dunn = min(min(i) for i in self.dmin[1:]) / max(self.diam)\n", " # print(self.Dunn)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "for n_clusters in [2]:#, 3, 4, 5, 6, 8, 10, 32, 38]:\n", " kmeans = KMeans(n_clusters=n_clusters, random_state=0)\n", " kmeansout = kmeans.fit(raw_data)\n", " e = cluster_eval(raw_data)\n", " e.eval(kmeansout.labels_, kmeansout.cluster_centers_, n_clusters)\n", " # print(n_clusters, e.DBI, e.Dunn)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2 11.96415880057959 0.06445432577653755\n", "3 13.050998228978061 0.06836927195715756\n", "4 14.56934977532082 0.07353152299031981\n", "5 22.827039192118047 0.06599536810054239\n", "6 22.53352523127153 0.07698826038993817\n", "8 23.286835603050353 0.10264918722812263\n", "10 23.316332832325283 0.10219677382317006\n", "32 23.748717193911787 0.12387311489577149\n" ] } ], "source": [ "for n_clusters in [2, 3, 4, 5, 6, 8, 10, 32]:\n", " kmeans = KMeans(n_clusters=n_clusters, random_state=0, init='random')\n", " kmeansout = kmeans.fit(raw_data)\n", " e = cluster_eval(raw_data)\n", " e.eval(kmeansout.labels_, kmeansout.cluster_centers_, n_clusters)\n", " print(n_clusters, e.DBI, e.Dunn)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "full 22.47773107988422 0.09831820651369301\n", "tied 23.670231282669295 0.14666086436496323\n", "diag 23.230354582341718 0.07905186911790175\n", "spherical 23.505452324345203 0.08163001651971362\n" ] } ], "source": [ "for covariance_type in ['full', 'tied', 'diag', 'spherical']:\n", " n_clusters = 6\n", " gm = GaussianMixture(n_components=n_clusters, covariance_type=covariance_type)\n", " gmout = gm.fit_predict(raw_data)\n", " e = cluster_eval(raw_data)\n", " e.eval(gmout, None, n_clusters)\n", " print(covariance_type, e.DBI, e.Dunn)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "def jaccard(clu_label, label):\n", " n = len(clu_label)\n", " a = 0\n", " bc = 0\n", " for i in range(n):\n", " for j in range(i):\n", " if clu_label[i] == clu_label[j] and label[i] == label[j]:\n", " a += 1\n", " if clu_label[i] != clu_label[j] and label[i] == label[j]:\n", " bc += 1\n", " if clu_label[i] == clu_label[j] and label[i] == label[j]:\n", " bc += 1\n", " return a / (a + bc)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.4533038469950667\n", "0.011226523974399329\n" ] } ], "source": [ "kmeans = KMeans(n_clusters=32, random_state=0)\n", "kmeansout = kmeans.fit(raw_data).labels_\n", "subject_label = subject_video_label[:, 0]\n", "video_label = subject_video_label[:, 1]\n", "print(jaccard(kmeansout, subject_label))\n", "print(jaccard(kmeansout, video_label))" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.title('pca result')\n", "plt.scatter(out[..., 0], out[..., 1])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 2 }