From 621f9255443b58a1cfc804242b0d8fb2469c0c8c Mon Sep 17 00:00:00 2001 From: Shuhui Bu Date: Thu, 27 Sep 2018 23:31:42 +0800 Subject: [PATCH] add homework 4 - logistic regression --- homework_04_logistic_regression/README.md | 31 ++++++++++++++++++ .../images/digit.png | Bin 0 -> 18313 bytes 2 files changed, 31 insertions(+) create mode 100644 homework_04_logistic_regression/README.md create mode 100644 homework_04_logistic_regression/images/digit.png diff --git a/homework_04_logistic_regression/README.md b/homework_04_logistic_regression/README.md new file mode 100644 index 0000000..4af1c6c --- /dev/null +++ b/homework_04_logistic_regression/README.md @@ -0,0 +1,31 @@ +# Logistic Regression + +自己编程实现Logistic Regression的多分类问题。使用的数据可以是sklearn的digital数据。 + +![digit](images/digit.png) + +加载数据的方式是: +``` +import matplotlib.pyplot as plt +from sklearn.datasets import load_digits + +# load data +digits = load_digits() + +# plot the digits +fig = plt.figure(figsize=(6, 6)) # figure size in inches +fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05) + +# plot the digits: each image is 8x8 pixels +for i in range(64): + ax = fig.add_subplot(8, 8, i + 1, xticks=[], yticks=[]) + ax.imshow(digits.images[i], cmap=plt.cm.binary) + + # label the image with the target value + ax.text(0, 7, str(digits.target[i])) +``` + +要求: +1. 自己编程实现Logistic Regression的多分了。 +2. 对比自己实现与sklearn的方法的精度。 +3. 如何将分类错误的样本可视化出来? \ No newline at end of file diff --git a/homework_04_logistic_regression/images/digit.png b/homework_04_logistic_regression/images/digit.png new file mode 100644 index 0000000000000000000000000000000000000000..f04842ed6cd572a43938863527fc14468a55db28 GIT binary patch literal 18313 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 SM8e5*L`hCf_Nk1C|NjF54}JXr literal 0 HcmV?d00001