机器学习实战 pca 代码跑不出来

lxtylovewd 2017-09-21 11:56:30

from numpy import *

def 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)

#dataMat对应数据集,N个特征
def pca(dataMat, topNfeat=9999999):
meanVals = mean(dataMat, axis = 0) #求平均值
meanRemoved = dataMat - meanVals #去平均值
covMat = cov(meanRemoved,rowvar=0) #计算协防差矩阵
eigVals, eigVects = linalg.eig(mat(covMat))
eigValInd = argsort(eigVals)
#从小到大对N个值排序
eigValInd = eigValInd[: -(topNfeat + 1) : -1]
redEigVects = eigVects[:, eigValInd]
#将数据转换到新空间
lowDDataMat = meanRemoved * redEigVects
reconMat = (lowDDataMat * redEigVects.T) + meanVals
return lowDDataMat, reconMat

#测试
dataMat = loadDataSet("testSet.txt")
lowDMat, reconMat = pca(dataMat,1)
print shape(lowDMat)

#show
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(dataMat[:,0].flatten().A[0], dataMat[:,1].flatten().A[0], marker='^', s = 90 )
ax.scatter(reconMat[:,0].flatten().A[0], reconMat[:,1].flatten().A[0],marker='o', s = 50 , c ='red' )

运行之后报错:
Traceback (most recent call last):
File "D:/Documents/GitHub/untitled2/pca1.py", line 30, in <module>
lowDMat, reconMat = pca(dataMat, 1)
File "D:/Documents/GitHub/untitled2/pca1.py", line 13, in pca
meanVals = mean(dataMat, axis=0) # 求平均值
File "D:\Program Files\Anaconda3\lib\site-packages\numpy\core\fromnumeric.py", line 2906, in mean
return mean(axis=axis, dtype=dtype, out=out, **kwargs)
File "D:\Program Files\Anaconda3\lib\site-packages\numpy\matrixlib\defmatrix.py", line 549, in mean
return N.ndarray.mean(self, axis, dtype, out, keepdims=True)._collapse(axis)
File "D:\Program Files\Anaconda3\lib\site-packages\numpy\core\_methods.py", line 73, in _mean
ret, rcount, out=ret, casting='unsafe', subok=False)
TypeError: unsupported operand type(s) for /: 'map' and 'int'
咋整
...全文
458 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
SMEB_9 2018-08-17
  • 打赏
  • 举报
回复
老问题了,前面几篇也有几处类似的报错。
修改如下:
def loadDataSet函数 第三行 改为:datArr = [list(map(float, line)) for line in stringArr]
因为2.7和3.6map的返回值不同。
??165 2017-11-07
  • 打赏
  • 举报
回复
第25 行直接用numpy的loadtxt函数打开文件就行。
jz745224058 2017-10-26
  • 打赏
  • 举报
回复
问题解决了吗?
机器学习涵盖了许多不同的算法,用于解决各种类型的问题。以下是一些常见的机器学习算法: 监督学习算法:线性回归(Linear Regression)逻辑回归(Logistic Regression)决策树(Decision Trees)随机森林(Random Forests)支持向量机(Support Vector Machines)朴素贝叶斯(Naive Bayes)K近邻算法(K-Nearest Neighbors)深度学习(Deep Learning)算法,如神经网络(Neural Networks) 无监督学习算法:K均值聚类(K-Means Clustering)层次聚类(Hierarchical Clustering)高斯混合模型(Gaussian Mixture Models)主成分分析(Principal Component Analysis,PCA)关联规则学习(Association Rule Learning) 这只是机器学习领域中的一小部分算法,还有许多其他的算法和技术。根据问题的性质和数据的特点,选择适合的算法是非常重要的。不同的算法有不同的假设和适用场景,因此在学习和应用机器学习算法时,需要综合考虑问题的需求和数据的特点。机器学习(Machine learning)是人工智能的子集,是实现人工智能的一种途径,但并不是唯一的途径。它是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能的学科。大概在上世纪80年代开始蓬勃发展,诞生了一大批数学统计相关的机器学习模型。 深度学习(Deep learning)是机器学习的子集,灵感来自人脑,由人工神经网络(ANN)组成,它模仿人脑中存在的相似结构。在深度学习中,学习是通过相互关联的「神经元」的一个深层的、多层的「网络」来进行的。「深度」一词通常指的是神经网络中隐藏层的数量。大概在2012年以后爆炸式增长,广泛应用在很多的场景中。机器学习研究的是计算机怎样模拟人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构,使之不断改善自身。 从实践的意义上来说,机器学习是在大数据的支撑下,通过各种算法让机器对数据进行深层次的统计分析以进行「自学」,使得人工智能系统获得了归纳推理和决策能力。

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧