【九月打卡】第9天 Python3入门机器学习
2022/9/15 4:17:18
本文主要是介绍【九月打卡】第9天 Python3入门机器学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
①课程介绍
课程名称:Python3入门机器学习 经典算法与应用 入行人工智能
课程章节:7-8;7-9;7-10;7-11
主讲老师:liuyubobobo
内容导读
- 第一部分 使用大数据MNIST进行PCA降维测试
- 第二部分 对手写字体降到二维进行可视化处理
- 第三部分 PCA降噪
- 第四部分 PCA降噪可视化
②课程详细
第一部分 使用大数据MNIST进行PCA降维测试
导入函数
import numpy as np import matplotlib import matplotlib.pyplot as plt from sklearn.datasets import fetch_openml
导入数据集
mnist = fetch_openml('mnist_784')
导入数据X,y
X = mnist['data'] y = mnist['target']
这个数据集帮你分好类了,不用进行train_test_split的分割
X_train = np.array(X[:60000], dtype=float) y_train = np.array(y[:60000], dtype=float) X_test = np.array(X[:10000], dtype=float) y_test = np.array(y[:10000], dtype=float)
导入knn算法
from sklearn.neighbors import KNeighborsClassifier knn_clf = KNeighborsClassifier() %time knn_clf.fit(X_train, y_train)
对大数据手写数据集进行预测
#很慢, %time knn_clf.score(X_test, y_test)
CPU times: total: 1min 57s
Wall time: 49.1 s
0.9818
进行PCA降维处理
from sklearn.decomposition import PCA pca = PCA(0.9) pca.fit(X_train) X_train_stand = pca.transform(X_train) X_test_stand = pca.transform(X_test)
查看前几主成分
pca.explained_variance_ratio_
降维之后进行knn算法运行查看效率
knn_clf2 = KNeighborsClassifier() %time knn_clf2.fit(X_train_stand, y_train)
CPU times: total: 31.2 ms
Wall time: 38.7 ms
很快
进行预测
%time knn_clf2.score(X_test_stand, y_test)
CPU times: total: 42.7 s
Wall time: 26.8 s
0.9858
快了将近1倍,
第二部分 对手写字体降到二维进行可视化处理
处理数据
np.array(X[:1]).reshape(28,28)
取出单个数据用于可视化处理
some_digit = np.array(X[1:2])
查看可视化数据是多少
y[1]
'0’
这个手写数据数据是0
接下来进行可视化看看
some_digit_image = some_digit.reshape(28, 28) plt.imshow(some_digit_image, cmap = matplotlib.cm.binary) plt.show()
通过可视化的手段物品们可以看出这是一个0,而我们需要机器能识别出这是0-9中的哪一个数字
接下来我们降维到三维对数据分布进行查看
降维
pca2 = PCA(n_components=3) pca2.fit(X) X_reduction = pca2.transform(X)
查看降维后数据的维度
X_reduction.shape
(70000, 3)
ax = plt.axes(projection='3d') for i in range(1): ax.scatter3D(X_reduction[y==str(i),0], X_reduction[y==str(i),1], X_reduction[y==str(i),2], alpha=0.2) plt.show()
数据团成一坨了,很难分清数据,准确率可能会比较低下
第三部分 PCA降噪
导入函数
import numpy as np import matplotlib import matplotlib.pyplot as plt
导入数据
X =np.empty((100,2)) X[:,0] = np.random.uniform(0., 100., size=100) X[:,1] = 0.75 * X[:,0] + 3 + np.random.normal(0, 5, size=100)
可视化
plt.scatter(X[:,0], X[:,1]) plt.show()
进行PCA降维然后升维查看数据分布,并进行可视化
from sklearn.decomposition import PCA pca = PCA(n_components=1) pca.fit(X) X_reduction = pca.transform(X) X_restore = pca.inverse_transform(X_reduction)
进行可视化
plt.scatter(X[:,0], X[:,1]) plt.scatter(X_restore[:,0], X_restore[:,1],color='r', marker='+') plt.show()
第四部分 PCA降噪可视化
导入数据
from sklearn import datasets digits = datasets.load_digits() X = digits.data y = digits.target
加一个正太话分布的噪音
noisy_digits = X + np.random.normal(0, 4, size=X.shape)
对可视化数据进行调整,
example_digits = noisy_digits[y==0,:][:10] for num in range(1,10): example_digits = np.vstack([example_digits, noisy_digits[y==num,:][:10]])
对手写数据数据进行可视化
def plot_digits(data): fig, axes = plt.subplots(10, 10, figsize=(10, 10), subplot_kw={'xticks':[], 'yticks':[]}, gridspec_kw=dict(hspace=0.1, wspace=0.1)) for i, ax in enumerate(axes.flat): ax.imshow(data[i].reshape(8, 8), cmap='binary', interpolation='nearest', clim=(0, 16)) plt.show() plot_digits(example_digits)
可以看到噪音还是很多的
PCA降维,在升维,发现噪音少了很多,同样也丢失了一部分数据
components = pca.transform(example_digits) filtered_digits = pca.inverse_transform(components) plot_digits(filtered_digits)
这个是处理之前的,数据,从可视化的角度可以看出确实,
在降维,升维的过程中丢失了一些信息
在降噪和关键信息间要选取一个平衡,视情况而定,调整
X_1 = X[y==0,:][:10] for num in range(1,10): X_1= np.vstack([X_1, X[y==num,:][:10]]) plot_digits(X_1)
③课程思考
-
一个有意思的现象,在舍去10%的数据的信息反而准确率上升了,这说明舍去的这部分数据对最终准确率是有负相关的,也就是PCA的降噪
-
在手写字体图片识别领域,降维算法和KNN算法可以优先考虑,很适合
④课程截图
这篇关于【九月打卡】第9天 Python3入门机器学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享