第一次调用已经写好的随机梯度下降算法!非常方便,之前还一直以为要自己写。数据都是SkLearn提供的,1700多张8*8的图片。最后只做了一个二分类。
import numpy as np
import os
import matplotlib
import matplotlib.pyplot as plt
plt.gray()
# plt.rcParams['axes.labelsize'] = 14
# plt.rcParams['xtick.labelsize'] = 12
# plt.rcParams['ytick.labelsize'] = 12
import warnings
warnings.filterwarnings('ignore')
np.random.seed(42)
from sklearn.datasets import load_digits
X, y = load_digits(return_X_y=True)
data_len = y.shape[0]
train_data_len = 1500
test_data_len = data_len - train_data_len
# 定义训练数据和测试数据
X_train, X_test = X[: train_data_len], X[train_data_len:]
y_train, y_test = y[: train_data_len], y[train_data_len:]
shuffle_index = np.random.permutation(train_data_len)
X_train, y_train = X_train[shuffle_index], y_train[shuffle_index]
y_train_6 = (y_train == 6)
y_test_6 = (y_test == 6)
from sklearn.linear_model import SGDClassifier
sgd_clf = SGDClassifier(max_iter=20, random_state=42)
sgd_clf.fit(X_train, y_train_6)
suspects = []
for i in range(train_data_len, data_len):
if y[i] == 6:
cur = sgd_clf.predict([X[i]])[0]
if cur == False:
suspects.append(i)
X = load_digits()
for i in suspects:
plt.matshow(X.images[i])
plt.show()
print(len(suspects))