python实验报告(经过pca算法)

合集下载

PCA降维度实验报告

PCA降维度实验报告

PCA降维度实验报告一、实验目的本实验旨在通过PCA降维算法对高维数据进行降维处理,从而减少特征维度,保留主要信息的同时最大程度地降低数据的冗余度。

二、实验原理1.数据标准化:首先对原始数据进行标准化处理,使得每个特征具有相同的均值和方差,避免一些特征对PCA结果的影响过大。

2.计算协方差矩阵:根据标准化后的数据计算协方差矩阵,该矩阵描述了各个特征之间的相关性。

3.计算特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。

4.选择主成分:选取特征值最大的前k个特征向量作为主成分,这些主成分表示了原始数据中的大部分信息。

5.数据转换:通过将原始数据与选取的主成分进行线性变换,得到降维后的数据。

三、实验过程本实验使用Python编程语言进行实现,具体步骤如下:2.数据预处理:对数据进行标准化处理,使得每个特征的均值为0,方差为13.计算协方差矩阵:根据标准化后的数据计算协方差矩阵。

4.特征值分解:对协方差矩阵进行特征值分解,得到特征值和特征向量。

5.选择主成分:根据特征值大小,选择前k个特征向量作为主成分。

6.数据转换:将原始数据与选取的主成分进行线性变换,得到降维后的数据。

7.可视化展示:将降维后的数据可视化展示,观察不同类别的样本在降维空间中的分布情况。

四、实验结果经过PCA降维处理后,将原始数据的100个特征减少到了10个主成分。

我们对降维后的数据进行了可视化展示,发现不同类别的样本在降维空间中有较好的聚类效果,各类别样本之间的分离度较高。

五、结果分析和讨论通过PCA降维处理,我们成功将原始数据从100维降低到10维,减小了特征维度,同时保留了主要信息。

这不仅能提高模型的计算效率,还能避免过拟合等问题的发生。

此外,PCA降维还能提供一种可视化手段,通过降维后的数据在较低维度空间的分布情况,我们可以更直观地理解数据集中存在的模式或规律。

然而,PCA降维算法也存在一定的局限性,例如对非线性数据的处理效果不佳,可能会引入信息损失等问题。

分类器设计实验报告

分类器设计实验报告

一、实验背景随着大数据时代的到来,数据挖掘和机器学习技术在各个领域得到了广泛的应用。

分类器作为机器学习中的重要工具,能够根据已知的数据特征对未知数据进行预测和分类。

本实验旨在设计并实现一个分类器,通过对数据集进行特征提取和模型训练,实现对未知数据的准确分类。

二、实验目标1. 设计并实现一个基于Python的分类器。

2. 对数据集进行预处理,包括数据清洗、特征提取和降维。

3. 选择合适的分类算法,对模型进行训练和评估。

4. 对分类器进行测试,分析其性能。

三、实验材料1. Python编程环境2. Scikit-learn库3. UCI机器学习数据库中的Iris数据集四、实验步骤1. 数据预处理- 数据清洗:检查数据集中是否存在缺失值、异常值等,并进行处理。

- 特征提取:根据数据集的特征,选择与分类任务相关的特征,并提取特征值。

- 降维:使用主成分分析(PCA)等方法对数据进行降维,减少数据维度,提高模型训练效率。

2. 分类算法选择- 根据实验目标,选择合适的分类算法。

本实验选择使用决策树(Decision Tree)算法。

3. 模型训练- 使用Iris数据集作为训练集,将数据集分为训练集和测试集。

- 使用Scikit-learn库中的DecisionTreeClassifier类实现决策树算法,对训练集进行训练。

4. 模型评估- 使用测试集对训练好的模型进行评估,计算分类准确率、召回率、F1值等指标。

5. 实验结果分析- 分析分类器的性能,包括准确率、召回率、F1值等指标。

- 分析不同特征对分类结果的影响。

- 分析不同参数对模型性能的影响。

五、实验结果1. 数据预处理:数据集中存在少量缺失值和异常值,经过清洗后,数据集完整。

2. 特征提取:选择与分类任务相关的特征,提取特征值。

3. 降维:使用PCA方法将数据维度从4降至2,降低了数据维度,提高了模型训练效率。

4. 模型训练:使用决策树算法对训练集进行训练,模型准确率为96.7%。

人脸识别实验报告

人脸识别实验报告

人脸识别实验报告1. 实验目的本实验旨在通过使用Python编程语言和OpenCV库实现人脸识别的功能,加强对于图像处理技术的理解和掌握,同时也了解了人脸识别技术应用的一些情况。

2. 实验环境•操作系统:Windows 10•Python版本:3.7.0•OpenCV版本:4.4.0除此之外,还需要安装以下Python库:•numpy•pillow3. 实验步骤3.1 数据准备和预处理为了达到更好的人脸识别效果,需要先采集一些训练数据用于模型训练。

本实验采用了LFW数据集中的部分人脸图像作为训练数据,共包含128个人的人脸图像,每个人20张,其中10张用于训练,10张用于测试。

数据集中的原始图像需要先进行预处理,包括将图像转换为灰度图像、对图像进行直方图均衡化(即增强对比度和细节),以及使用Haar级联分类器进行人脸检测,剪裁出人脸部分。

这些步骤可以使用OpenCV库提供的函数轻松完成。

3.2 特征提取和训练模型特征提取是人脸识别的核心步骤。

常用的特征提取方法包括主成分分析(PCA)、线性判别分析(LDA)等。

本实验采用PCA作为特征提取方法。

将人脸图像进行PCA降维处理后,可以得到人脸图像的特征向量,可以使用这些特征向量来训练人脸识别模型。

在本实验中,使用SVM(支持向量机)算法训练分类模型,将测试图像分类到与其最相似的训练图像。

3.3 人脸识别流程在得到训练模型之后,就可以进行人脸识别操作了。

人脸识别流程主要包括以下几个步骤:•采集待识别的图像,进行预处理。

•提取图像的特征向量。

•使用训练好的分类模型识别人脸图像。

•显示识别结果,即该图像属于训练数据集中的哪一个人。

4. 实验结果经过实验测试,本实验的人脸识别程序达到了较好的识别效果。

在使用LFW 数据集进行测试时,识别准确率达到了80%以上。

5. 实验通过本次实验,学习和掌握了人脸识别相关的基础理论和技术,同时也对于Python编程语言和OpenCV库有了更深入的理解。

python主成分权重计算

python主成分权重计算

python主成分权重计算主成分分析是一种常用的数据降维技术,它能够将高维数据集映射到低维空间中,同时保留数据间的关键信息。

在主成分分析中,我们还可以计算各个特征在主成分中的权重,这些权重可以告诉我们哪些特征对数据的变异性贡献最大。

在Python中,我们可以使用scikit-learn库来进行主成分分析以及计算特征权重。

首先,我们需要导入所需的库和数据集。

假设我们有一个包含n个样本和m个特征的数据集X,其中X的形状为(n, m)。

接下来,我们可以使用PCA类来进行主成分分析。

首先,我们需要创建一个PCA对象,并设置所需的主成分数量。

默认情况下,PCA 会将数据映射到与原始特征数量相同的维度上,但我们也可以通过设置n_components参数来指定映射到的维度。

```from sklearn.decomposition import PCApca = PCA(n_components=k) # 设置主成分数量为k```然后,我们可以使用fit_transform方法将数据集X映射到主成分空间中。

fit_transform方法将返回映射后的数据集,其中每一行代表一个样本,每一列代表一个主成分。

此外,我们还可以使用explained_variance_ratio_属性来获取每个主成分解释的变异性比例,它们的和等于1。

```X_pca = pca.fit_transform(X)explained_variance_ratio = pca.explained_variance_ratio_```接下来,我们可以计算每个特征在主成分中的权重。

在PCA类中,components_属性保存了主成分的加载向量,它的形状为(k, m),其中k是主成分数量,m是特征数量。

我们可以使用这些加载向量来计算每个特征在主成分中的权重。

```feature_weights = ponents_```我们可以打印出每个特征在主成分中的权重。

python数据挖掘实战之主成分分析

python数据挖掘实战之主成分分析

Python数据挖掘实战:PCA算法PCA 算法也叫主成分分析(principal components analysis),主要是用于数据降维的。

为什么要进行数据降维?因为实际情况中我们的训练数据会存在特征过多或者是特征累赘的问题,比如:∙一个关于汽车的样本数据,一个特征是”km/h的最大速度特征“,另一个是”英里每小时“的最大速度特征,很显然这两个特征具有很强的相关性∙拿到一个样本,特征非常多,样本缺很少,这样的数据用回归去你和将非常困难,很容易导致过度拟合PCA算法就是用来解决这种问题的,其核心思想就是将n 维特征映射到k维上(k < n),这k 维是全新的正交特征。

我们将这k 维成为主元,是重新构造出来的k 维特征,而不是简单地从n 维特征中取出其余n-k 维特征。

PCA 的计算过程假设我们得到2 维数据如下:其中行代表样例,列代表特征,这里有10个样例,每个样例有2个特征,我们假设这两个特征是具有较强的相关性,需要我们对其进行降维的。

第一步:分别求x 和y 的平均值,然后对所有的样例都减去对应的均值这里求得x 的均值为1.81 ,y 的均值为1.91,减去均值后得到数据如下:注意,此时我们一般应该在对特征进行方差归一化,目的是让每个特征的权重都一样,但是由于我们的数据的值都比较接近,所以归一化这步可以忽略不做第一步的算法步骤如下:本例中步骤3、4没有做。

第二步:求特征协方差矩阵公式如下:第三步:求解协方差矩阵的特征值和特征向量第四步:将特征值从大到小进行排序,选择其中最大的k 个,然后将其对应的k 个特征向量分别作为列向量组成特征矩阵这里的特征值只有两个,我们选择最大的那个,为:1.28402771 ,其对应的特征向量为:注意:matlab 的eig 函数求解协方差矩阵的时候,返回的特征值是一个特征值分布在对角线的对角矩阵,第i 个特征值对应于第i 列的特征向量第五步:将样本点投影到选取的特征向量上假设样本列数为m ,特征数为n ,减去均值后的样本矩阵为DataAdjust(m*n),协方差矩阵为n*n ,选取k 个特征向量组成后的矩阵为EigenVectors(n*k),则投影后的数据FinalData 为:FinalData (m*k)= DataAdjust(m*n) X EigenVectors(n*k)得到的结果是:这样,我们就将n 维特征降成了k 维,这k 维就是原始特征在k 维上的投影。

主成分分析实验报告

主成分分析实验报告

一、实验目的本次实验旨在通过主成分分析(PCA)方法,对给定的数据集进行降维处理,从而简化数据结构,提高数据可解释性,并分析主成分对原始数据的代表性。

二、实验背景在许多实际问题中,数据集往往包含大量的变量,这些变量之间可能存在高度相关性,导致数据分析困难。

主成分分析(PCA)是一种常用的降维技术,通过提取原始数据中的主要特征,将数据投影到低维空间,从而简化数据结构。

三、实验数据本次实验采用的数据集为某电商平台用户购买行为的调查数据,包含用户年龄、性别、收入、职业、购买商品种类、购买次数等10个变量。

四、实验步骤1. 数据预处理首先,对数据进行标准化处理,消除不同变量之间的量纲影响。

然后,进行缺失值处理,删除含有缺失值的样本。

2. 计算协方差矩阵计算标准化后的数据集的协方差矩阵,以了解变量之间的相关性。

3. 计算特征值和特征向量求解协方差矩阵的特征值和特征向量,特征值表示对应特征向量的方差,特征向量表示数据在对应特征方向上的分布。

4. 选择主成分根据特征值的大小,选择前几个特征值对应特征向量作为主成分,通常选择特征值大于1的主成分。

5. 构建主成分空间将选定的主成分进行线性组合,构建主成分空间。

6. 降维与可视化将原始数据投影到主成分空间,得到降维后的数据,并进行可视化分析。

五、实验结果与分析1. 主成分分析结果根据特征值大小,选取前三个主成分,其累计贡献率达到85%,说明这三个主成分能够较好地反映原始数据的信息。

2. 主成分空间可视化将原始数据投影到主成分空间,绘制散点图,可以看出用户在主成分空间中的分布情况。

3. 主成分解释根据主成分的系数,可以解释主成分所代表的原始数据特征。

例如,第一个主成分可能主要反映了用户的购买次数和购买商品种类,第二个主成分可能反映了用户的年龄和性别,第三个主成分可能反映了用户的收入和职业。

六、实验结论通过本次实验,我们成功运用主成分分析(PCA)方法对数据进行了降维处理,提高了数据可解释性,并揭示了数据在主成分空间中的分布规律。

python主成分分析法实现

python主成分分析法实现

python主成分分析法实现1.背景PCA(Principal Component Analysis),PAC的作用主要是降低数据集的维度,然后挑选出主要的特征。

PCA的主要思想是移动坐标轴,找到方差最大的方向上的特征值,什么叫方差最大的方向的特征值呢。

就像下图中的曲线B,一样,它的覆盖范围最广。

基本步骤:(1)首先计算数据集的协方差矩阵(2)计算协方差矩阵的特征值和特征向量(3)保留最重要的n个特征what is 协方差矩阵:定义是变量向量减去均值向量,然后乘以变量向量减去均值向量的转置再求均值。

例如x是变量,μ是均值,协方差矩阵等于E[(x-μ)(x-μ)^t],物理意义是这样的,例如x=(x1,x2,...,xi)那么协方差矩阵的第m行n列的数为xm与xn的协方差,若m=n,则是xn的方差。

如果x的元素之间是独立的,那么协方差矩阵只有对角线是有值,因为x独立的话对于m≠n的情况xm与xn的协方差为0。

另外协方差矩阵是对称的。

可以参考wiki:(/wiki/%E5%8D%8F%E6%96%B9%E 5%B7%AE%E7%9F%A9%E9%98%B5)2.代码实现伪代码如下(摘自机器学习实战):'''@author: Garvin'''from numpy import *import matplotlib.pyplot as pltdef loadDataSet(fileName, delim='\t'):fr = open(fileName)stringArr = [line.strip().split(delim) for line in fr.readlines()] datArr = [map(float,line) for line in stringArr]return mat(datArr)def pca(dataMat, topNfeat=9999999):meanVals = mean(dataMat, axis=0)meanRemoved = dataMat - meanVals #remove mean covMat = cov(meanRemoved, rowvar=0)eigVals,eigVects = linalg.eig(mat(covMat))eigValInd = argsort(eigVals) #sort, sort goes smallest to largesteigValInd = eigValInd[:-(topNfeat+1):-1] #cut off unwanted dimensionsredEigVects = eigVects[:,eigValInd] #reorganize eig vects largest to smallestlowDDataMat = meanRemoved * redEigVects#transform data into new dimensionsreconMat = (lowDDataMat * redEigVects.T) + meanVals return lowDDataMat, reconMatdef plotBestFit(dataSet1,dataSet2):dataArr1 = array(dataSet1)dataArr2 = array(dataSet2)n = shape(dataArr1)[0]n1=shape(dataArr2)[0]xcord1 = []; ycord1 = []xcord2 = []; ycord2 = []xcord3=[];ycord3=[]j=0for i in range(n):xcord1.append(dataArr1[i,0]);ycord1.append(dataArr1[i,1])xcord2.append(dataArr2[i,0]);ycord2.append(dataArr2[i,1])fig = plt.figure()ax = fig.add_subplot(111)ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')ax.scatter(xcord2, ycord2, s=30, c='green')plt.xlabel('X1'); plt.ylabel('X2');plt.show() if __name__=='__main__':mata=loadDataSet('/Users/hakuri/Desktop/testSet.txt')a,b= pca(mata, 2) loadDataSet函数是导入数据集。

降维分析实验报告

降维分析实验报告

一、实验背景随着数据量的不断增长,如何从大量数据中提取有价值的信息成为数据分析和处理的关键问题。

降维分析作为一种数据预处理方法,旨在减少数据集的维度,降低数据复杂度,提高数据分析的效率。

本实验通过降维分析,对原始数据进行处理,提取关键特征,为后续的数据挖掘和分析提供支持。

二、实验目的1. 了解降维分析的基本原理和方法;2. 掌握主成分分析(PCA)和因子分析(FA)两种降维方法;3. 通过实验验证降维分析在实际数据中的应用效果。

三、实验内容1. 数据集介绍:选取某电商平台用户购买行为的原始数据集,包含用户ID、商品ID、购买金额、购买时间等特征;2. 数据预处理:对原始数据进行清洗、缺失值处理和异常值处理;3. 主成分分析(PCA):(1)计算原始数据的协方差矩阵;(2)计算协方差矩阵的特征值和特征向量;(3)根据特征值选择主成分;(4)对原始数据进行主成分转换;4. 因子分析(FA):(1)计算原始数据的协方差矩阵;(2)提取因子;(3)对原始数据进行因子转换;5. 降维效果评估:比较原始数据集与降维后数据集的维度、方差解释率和模型拟合度等指标。

四、实验步骤1. 数据导入与预处理(1)使用Python的pandas库导入原始数据集;(2)对缺失值进行处理,采用均值、中位数或众数填充;(3)对异常值进行处理,采用Z-score或IQR方法剔除;(4)数据标准化,将特征值缩放到0-1之间。

2. 主成分分析(PCA)(1)计算原始数据的协方差矩阵;(2)计算协方差矩阵的特征值和特征向量;(3)根据特征值选择主成分,选取累计方差贡献率大于85%的主成分;(4)对原始数据进行主成分转换。

3. 因子分析(FA)(1)计算原始数据的协方差矩阵;(2)提取因子,采用主成分提取法;(3)对原始数据进行因子转换。

4. 降维效果评估(1)比较原始数据集与降维后数据集的维度;(2)计算方差解释率,评估降维后的数据集对原始数据的保留程度;(3)比较原始数据集与降维后数据集的模型拟合度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#-*-coding:utf-8-*-
"""
Created on Fri923:15:472017
@author
"""
#-*-coding:utf-8-*-
"""
Created on Tue May3020:31:022017
@author:
"""
import pandas as pd
import numpy as np
from sklearn.preprocessing import Imputer
from sklearn.cross_validation import train_test_split
from sklearn import svm
from sklearn import cross_validation
from sklearn.decomposition import PCA
from sklearn.lda import LDA
def loadData(filePath):
fr=open(filePath,'r+')
lines=fr.readlines()
Data=[]
label=[]
for line in lines:
items=line.strip().split(",")
label.append(items[0])
Data.append([float(items[i])for i in range(1,len(items))]) return Data,label
if__name__=='__main__':
x1_train,y1_train=loadData('C:\Users\Administrator\SPECTF.train') x_test,y_test=loadData('C:\Users\Administrator\SPECTF.test')
x_train=[]
y_train=[]
for i in range(23,37):
x_train.append(x1_train[i])
y_train.append(y1_train[i])
for i in range(173,187):
x_train.append(x1_train[i])
y_train.append(y1_train[i])
accuacy1=[]
accuacy2=[]
accuacy3=[]
for i in range(2,45):
for j in range(1,45):
lda=LDA(n_components=i)
#svd_solver:设置特征值分解的方法,默认为‘auto’,其他可选有
#‘full’,‘arpack’,‘randomized’
reduced_x_train=lda.fit_transform(x_train,y_train)
reduced_x_test=lda.fit_transform(x_test,y_test)
reduced_x_train,x_,y_train,y_=train_test_split(reduced_x_train, y_train,test_size=0.0)
clf1=svm.SVC(kernel='poly')
result=[]
clf1.fit(x_train,y_train)
result.append(np.mean(y_test==clf1.predict(x_test)))
accuacy1.append(result)
accuacy1.append(i)
clf2=svm.SVC(kernel='sigmoid')
result=[]
clf2.fit(x_train,y_train)
result.append(np.mean(y_test==clf2.predict(x_test)))
accuacy2.append(result)
accuacy2.append(i)
clf3=svm.SVC(kernel='linear')
result=[]
clf3.fit(x_train,y_train)
result.append(np.mean(y_test==clf3.predict(x_test)))
accuacy3.append(result)
accuacy3.append(i)
print("svm classifier accuacy1with poly kernel:",max(accuacy1),accuacy1[accuacy1.index(max(accuacy1))+1])
print("svm classifier accuacy1with sigmoid kernel:",max(accuacy2),accuacy2[accuacy2.index(max(accuacy2))+1])
print("svm classifier accuacy1with linear
kernel:",max(accuacy3),accuacy3[accuacy3.index(max(accuacy3))+1])。

相关文档
最新文档