From a420afc228e3b13fb4d7b2cde0c8a9144e395f32 Mon Sep 17 00:00:00 2001 From: 15307130115 <15307130115@fudan.edu.cn> Date: Thu, 18 Mar 2021 12:08:06 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BD=9C=E4=B8=9A1=E7=9A=84=E5=B0=9D?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assignment-1/submission/15307130115/README.md | 42 ++++++++ .../submission/15307130115/img/test.png | Bin 0 -> 26130 bytes .../submission/15307130115/img/train.png | Bin 0 -> 39090 bytes assignment-1/submission/15307130115/source.py | 96 ++++++++++++++++++ 4 files changed, 138 insertions(+) create mode 100644 assignment-1/submission/15307130115/README.md create mode 100644 assignment-1/submission/15307130115/img/test.png create mode 100644 assignment-1/submission/15307130115/img/train.png create mode 100644 assignment-1/submission/15307130115/source.py diff --git a/assignment-1/submission/15307130115/README.md b/assignment-1/submission/15307130115/README.md new file mode 100644 index 0000000..173c42b --- /dev/null +++ b/assignment-1/submission/15307130115/README.md @@ -0,0 +1,42 @@ +# 课程报告 + +这是一个课程报告的样例,我的代码在 [source.py](./source.py) 中。 + +我使用了 `sklearn` 中的 `KNeighborsClassifier`,所以我的代码无法通过限定依赖包的自动测试,但我仍可以获得 80% 分数中的大部分。 + +我以如下参数生成了数据集 + +$$ +\begin{array}{l} +\Sigma=\left[\begin{array}{cc} +73 & 0 \\ +0 & 22 +\end{array}\right] \\ +\\ +\mu=\left[\begin{array}{ll} +1 & 2 +\end{array}\right] +\end{array} +$$ + +这是我生成的训练集: + +![训练集](./img/train.png) + +这是我生成的测试集(查看源码了解如何控制图片的大小) + +测试集 + +我可以通过表格或者图片报告我的实验结果 + +Algo | Acc | +-----| ---- | +KNN | 0.94 | + +## 代码使用方法 + +```bash +python source.py g # 生成数据集 +python source.py d # 展示数据集 +python source.py # 训练和测试 +``` diff --git a/assignment-1/submission/15307130115/img/test.png b/assignment-1/submission/15307130115/img/test.png new file mode 100644 index 0000000000000000000000000000000000000000..91eb7f4d19ce5d49a18e16441f824b8190ea4b1a GIT binary patch literal 26130 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 literal 0 HcmV?d00001 diff --git a/assignment-1/submission/15307130115/img/train.png b/assignment-1/submission/15307130115/img/train.png new file mode 100644 index 0000000000000000000000000000000000000000..b33f36f126e616f1ade524bbd1c814355f2d518f GIT binary patch literal 39090 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 literal 0 HcmV?d00001 diff --git a/assignment-1/submission/15307130115/source.py b/assignment-1/submission/15307130115/source.py new file mode 100644 index 0000000..4717ab4 --- /dev/null +++ b/assignment-1/submission/15307130115/source.py @@ -0,0 +1,96 @@ +import sys +import numpy as np +import matplotlib.pyplot as plt +from sklearn.neighbors import KNeighborsClassifier + +class KNN: + + def __init__(self): + pass + + def fit(self, train_data, train_label): + N = train_data.shape[0] + cut = N//5*4 + + train_data, dev_data = train_data[:cut,], train_data[cut:,] + train_label, dev_label = train_label[:cut,], train_label[cut:,] + + max_score = 0 + max_score_K = 0 + for k in range(2,6): + clf = KNeighborsClassifier(n_neighbors=k) + clf.fit(train_data, train_label) + score = clf.score(dev_data, dev_label) + if score > max_score: + max_score, max_score_K = score, k + + self.clf = KNeighborsClassifier(n_neighbors=max_score_K) + self.clf.fit( + np.concatenate([train_data,dev_data]), + np.concatenate([train_label, dev_label]) + ) + + def predict(self, test_data): + return self.clf.predict(test_data) + + +def generate(): + mean = (1, 2) + cov = np.array([[73, 0], [0, 22]]) + x = np.random.multivariate_normal(mean, cov, (800,)) + + mean = (16, -5) + cov = np.array([[21.2, 0], [0, 32.1]]) + y = np.random.multivariate_normal(mean, cov, (200,)) + + mean = (10, 22) + cov = np.array([[10,5],[5,10]]) + z = np.random.multivariate_normal(mean, cov, (1000,)) + + idx = np.arange(2000) + np.random.shuffle(idx) + data = np.concatenate([x,y,z]) + label = np.concatenate([ + np.zeros((800,),dtype=int), + np.ones((200,),dtype=int), + np.ones((1000,),dtype=int)*2 + ]) + data = data[idx] + label = label[idx] + + train_data, test_data = data[:1600,], data[1600:,] + train_label, test_label = label[:1600,], label[1600:,] + np.save("data.npy",( + (train_data, train_label), (test_data, test_label) + )) + + +def read(): + (train_data, train_label), (test_data, test_label) = np.load("data.npy",allow_pickle=True) + return (train_data, train_label), (test_data, test_label) + +def display(data, label, name): + datas =[[],[],[]] + for i in range(len(data)): + datas[label[i]].append(data[i]) + + for each in datas: + each = np.array(each) + plt.scatter(each[:, 0], each[:, 1]) + plt.savefig(f'img/{name}') + plt.show() + +if __name__ == "__main__": + if len(sys.argv) > 1 and sys.argv[1] == "g": + generate() + if len(sys.argv) > 1 and sys.argv[1] == "d": + (train_data, train_label), (test_data, test_label) = read() + display(train_data, train_label, 'train') + display(test_data, test_label, 'test') + else: + (train_data, train_label), (test_data, test_label) = read() + + model = KNN() + model.fit(train_data, train_label) + res = model.predict(test_data) + print("acc =",np.mean(np.equal(res, test_label))) \ No newline at end of file -- Gitee From e6e2adce5ba39b918c0fbbdbb2d16460bc932bcd Mon Sep 17 00:00:00 2001 From: 15307130115 <15307130115@fudan.edu.cn> Date: Thu, 18 Mar 2021 12:13:59 +0800 Subject: [PATCH 2/5] try latex equation --- assignment-1/submission/15307130115/README.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/assignment-1/submission/15307130115/README.md b/assignment-1/submission/15307130115/README.md index 173c42b..80d6607 100644 --- a/assignment-1/submission/15307130115/README.md +++ b/assignment-1/submission/15307130115/README.md @@ -7,16 +7,11 @@ 我以如下参数生成了数据集 $$ -\begin{array}{l} -\Sigma=\left[\begin{array}{cc} -73 & 0 \\ -0 & 22 -\end{array}\right] \\ -\\ -\mu=\left[\begin{array}{ll} -1 & 2 -\end{array}\right] -\end{array} +\Sigma=\left[\begin{array}{cc}2.5 & 0 \\ 0 & 1.0\end{array}\right] +$$ + +$$ +\mu=\left[\begin{array}{ll}0 & 0\end{array}\right] $$ 这是我生成的训练集: -- Gitee From 9de657a4bf8f55fc29286ed8bc5e9c889ed4c2d8 Mon Sep 17 00:00:00 2001 From: 15307130115 <15307130115@fudan.edu.cn> Date: Thu, 18 Mar 2021 13:20:45 +0800 Subject: [PATCH 3/5] update --- assignment-1/submission/15307130115/README.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/assignment-1/submission/15307130115/README.md b/assignment-1/submission/15307130115/README.md index 80d6607..d16a51b 100644 --- a/assignment-1/submission/15307130115/README.md +++ b/assignment-1/submission/15307130115/README.md @@ -7,11 +7,16 @@ 我以如下参数生成了数据集 $$ -\Sigma=\left[\begin{array}{cc}2.5 & 0 \\ 0 & 1.0\end{array}\right] -$$ - -$$ -\mu=\left[\begin{array}{ll}0 & 0\end{array}\right] +\begin{array}{l} +\Sigma=\left[\begin{array}{cc} +73 & 0 \\\\ +0 & 22 +\end{array}\right] \\\\ +\\\\ +\mu=\left[\begin{array}{ll} +1 & 2 +\end{array}\right] +\end{array} $$ 这是我生成的训练集: -- Gitee From 58fdf4b99b35dd332af4b2c24b6d7b22fcf53425 Mon Sep 17 00:00:00 2001 From: 15307130115 <15307130115@fudan.edu.cn> Date: Thu, 18 Mar 2021 13:24:32 +0800 Subject: [PATCH 4/5] update --- assignment-1/submission/15307130115/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/assignment-1/submission/15307130115/README.md b/assignment-1/submission/15307130115/README.md index d16a51b..6faadaa 100644 --- a/assignment-1/submission/15307130115/README.md +++ b/assignment-1/submission/15307130115/README.md @@ -12,7 +12,6 @@ $$ 73 & 0 \\\\ 0 & 22 \end{array}\right] \\\\ -\\\\ \mu=\left[\begin{array}{ll} 1 & 2 \end{array}\right] -- Gitee From 6e4108bc316034b473906a87589cf16fa2883e1a Mon Sep 17 00:00:00 2001 From: 15307130115 <15307130115@fudan.edu.cn> Date: Thu, 18 Mar 2021 13:27:28 +0800 Subject: [PATCH 5/5] add new info --- assignment-1/submission/15307130115/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assignment-1/submission/15307130115/README.md b/assignment-1/submission/15307130115/README.md index 6faadaa..ce19439 100644 --- a/assignment-1/submission/15307130115/README.md +++ b/assignment-1/submission/15307130115/README.md @@ -4,7 +4,7 @@ 我使用了 `sklearn` 中的 `KNeighborsClassifier`,所以我的代码无法通过限定依赖包的自动测试,但我仍可以获得 80% 分数中的大部分。 -我以如下参数生成了数据集 +我以如下参数生成了数据集(由于 Gitee 网站的 bug,你需要用`\\\\`来替换 latex 公式中的 `\\`) $$ \begin{array}{l} -- Gitee