python svm pca实践二

简介: 继上一片的内容,这片来·讲一下sklearn来进行简单的人脸识别,这里用的方法是pca和svm 先导入必要的包和数据集import numpy as npimport matplotlib.

继上一片的内容,这片来·讲一下sklearn来进行简单的人脸识别,这里用的方法是pca和svm
先导入必要的包和数据集

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn import datasets

lfw_people = datasets.fetch_lfw_people(min_faces_per_person=70, \
                                       resize=0.4)

sklearn的人脸数据集包含5千多个不同人的人脸,但有些人的人脸只包含一张,

n_samples, h, w = lfw_people.images.shape
print('height and width of images:', h, w)

# The images in X have been collapsed into a 1D array
# just like for the handwritten digits
X = lfw_people.data

# X.shape[0] tells you the number of images (faces);
# this is the same as n_samples ahove
# X.shape[1] gives the number of pixels for each image
# or, "features"

print('X.shape', X.shape)
n_features = X.shape[1]


# the label/target to predict is the id of the person -- y is an integer
y = lfw_people.target
# target_names are actually names
target_names = lfw_people.target_names
print('target_names.shape', target_names.shape)
print('target_names', target_names)

# n_classes gives the number of people 
# Different from the number of faces (n_samples)!!
n_classes = target_names.shape[0]

print("Total dataset size:")
print("n_samples (number of faces): {0}".format(n_samples))
# n_features = 1850, which is 50x37, the dimension of the images.
print("n_features (number of pixels): {0}".format(n_features))
print("n_classes (number of people): {0}".format(n_classes))

通过打印可以看到数据集人脸的尺寸为50x37,为7类共1288张人脸

pca = PCA(n_components=4,whiten = True)
X_proj = pca.fit_transform(X[:500])
print("eigen vector",pca.components_)
print("...")
print('eigen value', pca.explained_variance_[:2])
print(np.var(X_proj[:,0]))
print(np.var(X_proj[:,1]))

取500组数据将其降维为4个维度,并进行归一化处理
explained_variance_,它代表降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分

from sklearn import svm
def plot_faces(n_features):
#     nside = 1
    X = lfw_people.data
#     fig, axes = plt.subplots(nside, nside, figsize=(8, 8))

    plt.imshow(X[5].reshape(50,37))
plot_faces(n_features= 16)
plt.show()

试着打一下其中的一幅图片
这里写图片描述

Xtrain = lfw_people.data[:1000]
Xtest = lfw_people.data[1000:,]
ytrain = lfw_people.target[:1000]
ytest = lfw_people.target[1000:,]
# Xtest = X[select_idx].reshape(1, -1)
# test_img = X[select_idx]
# ytest = y[select_idx]

# 
n_comp = 50

pca = PCA(n_comp, whiten = True)  

pca.fit(Xtrain)
# pca.fit(Xtest)

Xtrain_proj = pca.transform(Xtrain)
# projecting test data onto pca axes
Xtest_proj = pca.transform(Xtest)

print(Xtrain_proj.shape)
print(Xtest_proj.shape)


# ************************************* The SVM Section ********************************

# instantiating an SVM classifier
clf = svm.SVC(gamma=0.001, C=100.)

# apply SVM to training data and draw boundaries.
clf.fit(Xtrain_proj, ytrain)
# Use SVM-determined boundaries to make
# a prediction for the test data point.
ypred = clf.predict(Xtest_proj)

correct = np.sum(ytest == ypred)
print(correct/288*100)

接下来之前载入的数据用pca和svm进行训练识别,在1288个数据中取前1000组为训练集,后288个为测试集,pca将维为50维,并用训练集训练的模型对测试集进行预测,最后的测试精度为:81.25%,相对于现状流行的深度学习来说精度还是差了一点。
这里写图片描述

目录
相关文章
|
2月前
|
机器学习/深度学习 算法 数据挖掘
线性回归模型的原理、实现及应用,特别是在 Python 中的实践
本文深入探讨了线性回归模型的原理、实现及应用,特别是在 Python 中的实践。线性回归假设因变量与自变量间存在线性关系,通过建立线性方程预测未知数据。文章介绍了模型的基本原理、实现步骤、Python 常用库(如 Scikit-learn 和 Statsmodels)、参数解释、优缺点及扩展应用,强调了其在数据分析中的重要性和局限性。
65 3
|
20天前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
68 15
|
28天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
38 7
|
27天前
|
存储 缓存 Python
Python中的装饰器深度解析与实践
在Python的世界里,装饰器如同一位神秘的魔法师,它拥有改变函数行为的能力。本文将揭开装饰器的神秘面纱,通过直观的代码示例,引导你理解其工作原理,并掌握如何在实际项目中灵活运用这一强大的工具。从基础到进阶,我们将一起探索装饰器的魅力所在。
|
29天前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
42 5
|
2月前
|
机器学习/深度学习 人工智能 数据可视化
使用Python进行数据可视化:探索与实践
在数字时代的浪潮中,数据可视化成为了沟通复杂信息和洞察数据背后故事的重要工具。本文将引导读者通过Python这一强大的编程语言,利用其丰富的库函数,轻松入门并掌握数据可视化的基础技能。我们将从简单的图表创建开始,逐步深入到交互式图表的制作,最终实现复杂数据的动态呈现。无论你是数据分析新手,还是希望提升报告吸引力的专业人士,这篇文章都将是你的理想指南。
56 9
|
2月前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
2月前
|
设计模式 缓存 开发者
Python中的装饰器:从入门到实践####
本文深入探讨了Python中强大的元编程工具——装饰器,它能够以简洁优雅的方式扩展函数或方法的功能。通过具体实例和逐步解析,文章不仅介绍了装饰器的基本原理、常见用法及高级应用,还揭示了其背后的设计理念与实现机制,旨在帮助读者从理论到实战全面掌握这一技术,提升代码的可读性、可维护性和复用性。 ####
|
2月前
|
存储 开发者 Python
Python 编程基础:从入门到实践
本文旨在通过深入浅出的方式,向初学者介绍 Python 编程语言的基础概念和实践应用。我们将从 Python 的基本语法开始,逐步过渡到函数、模块的使用,最后以实际项目案例结束,帮助读者构建起完整的编程知识体系。
42 3
|
2月前
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践感悟####
本文作为一篇技术性文章,旨在深入探讨Python编程中设计模式的应用价值与实践心得。在快速迭代的软件开发领域,设计模式如同导航灯塔,指引开发者构建高效、可维护的软件架构。本文将通过具体案例,展现设计模式如何在实际项目中解决复杂问题,提升代码质量,并分享个人在实践过程中的体会与感悟。 ####