一、本书介绍
按照传统惯例,在正式开始之前还是先介绍以下这本书,本书的名称是《人工智能实践教程——从Python入门到机器学习》,作者是邵一川,本书没有对作者进行介绍,网上查到的信息是沈阳大学的副教授。
本书总共有11章,主要分为3大块,第一部分是Python编程;第二部分是机器学习;第三部分是神经网络。
从内容可以看出来,本书层次感非常强,由浅入深,循序渐进。
另外,本书还配有电子档的资料,所有资料都托管在gitee和github。
地址为:
和
本书是黑白印刷,导致书中的很多彩色的图表没法看,纸张也不厚实,有点盗版的感觉,感觉有点低成本的意思。
希望在内容上能够更加充实。
二、主成分分析简介
主成分分析(Principal Component Analysis, PCA)是机器学习的经典算法之一,是一种统计方法。
通过正交变换将一组可能存在相关性的变量转换为一组互不相关的变量,转换后的这组变量称为主成分。
PCA的原理是将原始变量转换后重新组合成互不相关的新变量,使少数的新变量就能反映原始变量的信息。
例如,假如F1是第一个线性组合,方差Var(F1)越大,F1反映的信息越多。因此,在所有线性组合中,选取方差最大的线性组合F1作为第一个主成分。
如果第一个主成分不足以反映原来P个指标的信息,再考虑选取F2,即第二个线性组合,为了有效地反映原来P个指标的信息,F1中的信息无须出现在F2中,用数学语言表达为
Cov(F1,F2)=0,F2称为第二个主成分,以此类推,可以选取第三个,第四个,...第k个主成分。
PCA的特点:
- 是一种非监督学习算法;
- 主要用于数据的降维;
- 通过降维,可以发现更易于理解的特征;
- 可用于可视化及数据去噪。
PCA的主要步骤如下:
三、PCA示例
import numpy as np
import matplotlib.pyplot as plt
# 载入数据
data = np.genfromtxt("/home/xp/work/ML_shao1chuan/PCA/data.csv", delimiter=",")
x_data = data[:,0]
y_data = data[:,1]
plt.scatter(x_data,y_data)
plt.show()
print(x_data.shape)
# 数据中心化
def zeroMean(dataMat):
# 按列求平均,即各个特征的平均
meanVal = np.mean(dataMat, axis=0)
newData = dataMat - meanVal
return newData, meanVal
newData,meanVal=zeroMean(data)
# np.cov用于求协方差矩阵,参数rowvar=0说明数据一行代表一个样本
covMat = np.cov(newData, rowvar=0)
# 协方差矩阵
print(covMat)
# np.linalg.eig求矩阵的特征值和特征向量
eigVals, eigVects = np.linalg.eig(np.asmatrix(covMat))
# 特征值
print(eigVals)
# 特征向量
print(eigVects)
# 对特征值从小到大排序
eigValIndice = np.argsort(eigVals)
print(eigValIndice)
top = 1
# 最大的top个特征值的下标
n_eigValIndice = eigValIndice[-1:-(top+1):-1]
print(n_eigValIndice)
# 最大的n个特征值对应的特征向量
n_eigVect = eigVects[:,n_eigValIndice]
print(n_eigVect)
# 低维特征空间的数据
lowDDataMat = newData*n_eigVect
print(lowDDataMat)
# 利用低维度数据来重构数据
reconMat = (lowDDataMat*n_eigVect.T) + meanVal
print(reconMat)
# 载入数据
data = np.genfromtxt("/home/xp/work/ML_shao1chuan/PCA/data.csv", delimiter=",")
x_data = data[:,0]
y_data = data[:,1]
plt.scatter(x_data,y_data)
# 重构的数据
x_data = np.array(reconMat)[:,0]
y_data = np.array(reconMat)[:,1]
plt.scatter(x_data,y_data,c='r')
plt.show()
运行结果:
上图红色部分就是利用低维数据重构的数据。
|