Machine learning for OpenCV 学习笔记 day4
来源:互联网 发布:win10平板相关软件 编辑:程序博客网 时间:2024/05/16 05:41
独立成分分析(ICA)
其他与openCV中PCA算法类似的降维方式还有scikit-learn中的ICA。
from sklearn import decomposition
跟前面提到的一样,我们还是使用fit_transform 函数来训练模型。
ica = decomposition.FastICA()X2 = ica.fit_transform(X)
然后我们就可以将输出结果可视化出来:
plt.figure(figsize=(10,6))plt.plot(X2[:,0],X2[:,1],'o')plt.xlabel('first principal component')plt.ylabel('second principal component')plt.axis([-0.2,0.2,-0.2,0.2])plt.show()
输出结果为:
非负矩阵分解(NMF)
使用此方法唯一的限制是,数据矩阵中的元素都是非负的
nmf = decomposition.NMF()X2 = nmf.fit_transform(X)#可视化plt.figure(figsize=(10,6))plt.plot(X2[:,0],X2[:,1],'o')plt.xlabel('first principal component')plt.ylabel('second principal component')plt.axis([0,7,0,15])plt.show()
输出结果为:
表示类型变量
类型特征所带来的问题就是它们不是连续变化的,这就给数字表示变量带来了困难。例如一根香蕉不是绿的就是黄的,不可能两种都有;一个产品是属于服装部门还是属于书籍部门,但是很少同属于两个部门… 等等
首先以一些机器学习和人工智能的先辈们的信息为例,加入我们有如下信息:
data = [ {'name':'Alan Turing','born':1912,'died':1954}, {'name':'Herbert A.Simon','born':1916,'died':2001}, {'name': 'Jacek Karpinski', 'born': 1927, 'died': 2010}, {'name': 'J.C.R. Licklider', 'born': 1915, 'died': 1990}, {'name': 'Marvin Minsky', 'born': 1927, 'died': 2016},]
当我们想给以上信息编码时,若使用下面的方式好像是可行的,但是从机器学习的角度却不可行。
{'Alan Turing': 1, 'Herbert A. Simon': 2, 'Jacek Karpinsky': 3, 'J.C.R. Licklider': 4, 'Marvin Minsky': 5};
一种快速的方法就是使用sklearn中的DictVectorizer 也叫独热编码(one-hot encoding),使用方式就是将一个包含数据的字典输入到fit_transform() 里面
from sklearn.feature_extraction import DictVectorizervec = DictVectorizer(sparse=False, dtype=int)vec.fit_transform(data)# 显示出各数据对应的特征名称print(vec.get_feature_names())
输出结果是:
所以第一行的意思可以理解为: ‘born’=1912, ‘died’=1954, ‘Alan Turing’=1, ‘Herbert A. Simon’=0, ‘J.C.R Licklider’=0, ‘Jacek Karpinsik’=0, and ‘Marvin Minsky’=0. 后面的数据以此类推。
表示文本特征
sample = [ 'feature engineering', 'feature selection', 'feature extraction']
想要给上面的文本信息打标签,最简单的方法就是使用单词序号编码,即给不同的单词表上序号,在sklearn中我们可以使用CountVectorizer 去实现它。
from sklearn import feature_extractionvec=feature_extraction.text.CountVectorizer()X=vec.fit_transform(sample)print(X.toarray())print(vec.get_feature_names())
默认X输出的是一个稀疏矩阵,我们 想很好的观察它需要将X转换成正常的矩阵,所以这里使用X.toarray() 函数来实现。我们依旧输出特征的名称:
但是这种方法的一个弊端就是我们可能会放太多的权重在出现频率高的单词上面,我们使用一种叫做 frequency-inverse document frequency(TF-IDF):
from sklearn.feature_extraction.text import TfidfVectorizervec = TfidfVectorizer()X = vec.fit_transform(sample)X.toarray()
输出结果为:
表示图片
- Machine learning for OpenCV 学习笔记 day4
- Machine learning for openCV 学习笔记 day1
- Machine learning for OpenCV 学习笔记 day2
- Machine learning for OpenCV 学习笔记 day5
- Machine learning for OpenCV 学习笔记 day6
- 《Neural Networks for Machine Learning》学习笔记
- Machine Learning 学习笔记
- machine learning 学习笔记
- Mechine learning for OpenCV 学习笔记 day3
- 机器学习笔记-advice for applying machine learning
- Stanford 机器学习笔记 Week6 Advice for Applying Machine Learning
- 【Stanford机器学习笔记】8-Advice for Applying Machine Learning
- 机器学习课程 Neural Netword for Machine Learning笔记
- Machine Learning 课程学习笔记
- 【Machine Learning】SVM学习笔记
- 学习笔记-machine learning foundaton2
- machine learning 学习笔记<一>
- machine learning学习笔记<二>
- 《C Primer Plus 》第六版 习题 第三章
- matlab variables 窗的一个可能的bug
- mac 很干净的卸载 Java7 Java8
- 列出两个数组中相同的字符(字符串组成数组)(数组的交集、差集)
- 有关Java虚拟机与Java被称为‘平台无关的编程语言’的简单特点
- Machine learning for OpenCV 学习笔记 day4
- 软件测试分类
- XZ_iOS之Runtime使用运行时实现字典转模型和关联对象
- 【笨鸟先飞】Java重新学习日记5---类的使用
- 集合模拟斗地主洗牌,发牌,看牌
- poj1144(tarjan求割点)
- 使用一致性哈希实现Redis分布式部署
- Java中已经被try,catch的异常再其上一层中如何继续被try,catch
- C语言 单向链表创建