机器学习测试笔记(18)——降维(上)

简介: 机器学习测试笔记(18)——降维(上)

1.降维解决能问题


降维解决能问题:

  1. 缓解维度灾难问题;
  2. 压缩数据的同时让信息损失最小化;
  3. 理解低维度更容易。

有些特征的意义不大,可以通过降维来解决

2. 主生成分析


2.1 概念

主生成分析(Principal CpmponentAnalysis:PCA)。无监督线性降维,用于数据压缩、消除冗余和消除噪音。


image.png


对图书价格关注程度不是很重要,可以通过成分1——成分2进行降维。

image.png


映射到蓝色后方差最小。


2.2数学意义

X= [[x11x12 x13…x1p],

   [x21 x22 x23…x2p],

    …

   [xn1 xn2 xn3…xnp]]

 = [x1 x2 x3…xp]

其中xj=[x1j x2j…xnj] ( j=1,2,3,…,p)

主成分分析就是将P个观测变量综合成为P个新的变量(综合变量),即:

F1 =a11x1+a12x2+…+a1pxp

F2 =a21x1+a22x2+…+a2pxp

Fp =ap1x1+ap2x2+…+appxp

简写

Fj =aj1x1+aj2x2+…+ajpxp(j=1,2,3,…,p )

Fi Fj互不相关(i                             j,i,j= 1,2,3,…,p )

F1的方差 > F2的方差> … > Fp的方差

称为第一主成分F1,为第二主成分F2p主成分Fp

2.3代码

通过from sklearn.decomposition.PCA方法来实现。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
#对红酒降维PCA可视化
def dimension_reduction_for_wine_pca():
        scaler =StandardScaler()
        wine =datasets.load_wine()
        X = wine.data
        y = wine.target
#由于是无监督学习,所以尽对X进行拟合
        X_scaled =scaler.fit_transform(X)
# 打印处理后的数据形态
        print("处理后的数据形态:",X_scaled.shape)


输出


处理后的数据形态: (178, 13)


降维前有178个样本13个特征。

 

# 进行PCA处理
    pca = PCA(n_components=2)#降到2类
    pca.fit(X_scaled)
    X_pca =pca.transform(X_scaled)
# 打印主成分提取后的数据形态
print("主成分提取后的数据形态:", X_pca.shape)


输出


主成分提取后的数据形态: (178, 2)


降维前13个特征减少到2个。


# 将3个分类主成分提取出来
x0 = x_pca[wine.target==0]
    x1 = x_pca[wine.target==1]
    x2 = x_pca[wine.target==2]
#绘制散点图
   plt.scatter(x0[:,0],x0[:,1],c='r',s=60,edgecolor='k')
   plt.scatter(x1[:,0],x1[:,1],c='g',s=60,edgecolor='k')
   plt.scatter(x2[:,0],x2[:,1],c='b',s=60,edgecolor='k')
#设置图注
   plt.legend(wine.target_names,loc='best')
    plt.xlabel('component 1')
    plt.ylabel('component 2')
    plt.show()

image.png


#使用主成分绘制热度图
   plt.matshow(pca.components_,cmap='plasma')
#纵轴为主成分
   plt.yticks([0,1],['component 1','component 2'])
    plt.colorbar()
#横轴为原始特征向量
   plt.xticks(range(len(wine.feature_names)),wine.feature_names,rotation=60,ha='left')
    plt.show()

image.png

-0.5~0.4,设计到13个特性,数字为正数,与主特征正相关;否则负相关。


2.4特征提取

from sklearn.neural_network import MLPClassifier
#特征提取
def pca_for_face():
        faces = datasets.fetch_lfw_people(min_faces_per_person=20,resize=0.8)
        image_shape =faces.images[0].shape
#把照片打印出来
        fig, axes =plt.subplots(3,4,figsize=(12,9),subplot_kw={'xticks':(),'yticks':()})
for target,image,ax inzip(faces.target,faces.images,axes.ravel()):
                ax.imshow(image,cmap=plt.cm.gray)
               ax.set_title(faces.target_names[target])
        plt.show()


注意:第一次运行前,可以从第三方网站下载到C:\Users\\scikit_learn_data\lfw_home。可以加快速度。

image.png


#用神经网络模型进行训练
       X_train,X_test,y_train,y_test = train_test_split(faces.data/255,faces.target,random_state=62)
        mlp =MLPClassifier(hidden_layer_sizes=[100,100],random_state=62,max_iter=400)
       mlp.fit(X_train,y_train)
print("模型识别准确率:{:.2%}".format(mlp.score(X_test,y_test)))
#使用白化功能处理人脸数据
        pca =PCA(whiten=True,n_components=0.9,random_state=62).fit(X_train)
        X_train_whiten =pca.transform(X_train)
        X_test_whiten =pca.transform(X_test)
print("白化后数据形态:{}".format(X_train_whiten.shape))
#使用白化后的神经网络训练
       mlp.fit(X_train_whiten,y_train)
print("白化后模型识别准确率:{:.2%}".format(mlp.score(X_test_whiten,y_test)))


输出

模型识别准确率:53.84%
白化后数据形态:(2267, 105)
白化后模型识别准确率:57.14%


如此快的时间内,准确率达到53.84%已经很不错了。

目录
相关文章
|
7月前
|
存储 数据可视化 测试技术
一个测试工程师的实战笔记:我是如何在Postman和Apipost之间做出选择的?
优秀的API测试工具应该具备: 分层设计:既有可视化操作,也开放代码层深度定制 场景感知:自动识别加密需求推荐处理方案 协议包容:不强迫开发者为了不同协议切换工具 数据主权:允许自主选择数据存储位置
184 7
|
10月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
313 6
|
10月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
231 1
|
11月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
500 1
|
11月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
234 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
11月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
762 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
11月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
2192 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
10月前
|
机器学习/深度学习 数据采集 人工智能
自动化测试的未来:AI与机器学习的融合之路
【10月更文挑战第41天】随着技术的快速发展,软件测试领域正经历一场由人工智能和机器学习驱动的革命。本文将探讨这一趋势如何改变测试流程、提高测试效率以及未来可能带来的挑战和机遇。我们将通过具体案例分析,揭示AI和ML在自动化测试中的应用现状及其潜力。
193 0
|
4月前
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
|
10月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
954 6