pythonscikit测试代码(用Python做科学计算工具篇)
pythonscikit测试代码(用Python做科学计算工具篇)>>> pca.components_ array([[ 0.36158... -0.08226... 0.85657... 0.35884...] [ 0.65653... 0.72971... -0.17576... -0.07470...]]) 其他属性也可用:>>>>>> X = iris.data >>> y = iris.target PCA使用矩阵 X 的截断奇异值分解计算原始特征的线性组合,以将数据投影到顶部奇异向量的基数上。>>>>>> from sklearn.decomposition import PCA >>> pca = PCA(n_components=2 whiten=True) >
所需基本库
- numpy
- scipy
- matplotlib
- 简介:问题设置
- 使用 scikit-learn 进行机器学习的基本原理
- 监督学习:手写数字的分类
- 监督学习:住房数据的回归
- 测量预测性能
- 无监督学习:降维和可视化
- 特征脸示例:链接 PCA 和 SVM
- 特征脸示例:链接 PCA 和 SVM
- 参数选择、验证和测试
6.6. 无监督学习:降维和可视化
无监督学习应用于没有 y 的 X:没有标签的数据。一个典型的用例是在数据中找到隐藏的结构。
6.6.1. 降维:PCA降维派生出一组比原始特征集更小的新人工特征。在这里,我们将使用主成分分析 (PCA),这是一种降维方法,旨在保留原始数据的大部分方差。我们将sklearn.decomposition.PCA在 iris 数据集上使用:
>>>
>>> X = iris.data
>>> y = iris.target
PCA使用矩阵 X 的截断奇异值分解计算原始特征的线性组合,以将数据投影到顶部奇异向量的基数上。
>>>
>>> from sklearn.decomposition import PCA
>>> pca = PCA(n_components=2 whiten=True)
>>> pca.fit(X)
PCA(... n_components=2 ...)
拟合后,PCA在components_属性中公开奇异向量:
>>>
>>> pca.components_
array([[ 0.36158... -0.08226... 0.85657... 0.35884...]
[ 0.65653... 0.72971... -0.17576... -0.07470...]])
其他属性也可用:
>>>
>>> pca.explained_variance_ratio_
array([0.92461... 0.05301...])
让我们沿着前两个维度投影 iris 数据集:
>>>
>>> X_pca = pca.transform(X)
>>> X_pca.shape
(150 2)
PCA normalizes和whitens数据,这意味着数据现在以具有单位方差的两个组件为中心:
>>>
>>> X_pca.mean(axis=0)
array([...e-15 ...e-15])
>>> X_pca.std(axis=0 ddof=1)
array([1. 1.])
此外,样本分量不再具有任何线性相关性:
>>>
>>> np.corrcoef(X_pca.T)
array([[1.00000000e 00 0.0]
[0.0 1.00000000e 00]])
使用许多保留组件 2 或 3,PCA 可用于可视化数据集:
>>>
>>> target_ids = range(len(iris.target_names))
>>> for i c label in zip(target_ids 'rgbcmykw' iris.target_names):
... plt.scatter(X_pca[y == i 0] X_pca[y == i 1]
... c=c label=label)
<matplotlib.collections.PathCollection ...
请注意,这个投影是在没有任何关于标签的信息(由颜色表示)的情况下确定的:这就是学习是无监督的。尽管如此,我们看到投影让我们深入了解参数空间中不同花朵的分布:值得注意的是,鸢尾花比其他两个物种更加明显。
6.6.2. 非线性嵌入的可视化:tSNE对于可视化,更复杂的嵌入可能很有用(对于统计分析,它们更难控制)。sklearn.manifold.TSNE是一种如此强大的流形学习方法。我们将其应用于数字 数据集,因为数字是维度 8*8 = 64 的向量。将它们嵌入 2D 可以实现可视化:
>>>
>>> # Take the first 500 data points: it's hard to see 1500 points
>>> X = digits.data[:500]
>>> y = digits.target[:500]
>>> # Fit and transform with a TSNE
>>> from sklearn.manifold import TSNE
>>> tsne = TSNE(n_components=2 random_state=0)
>>> X_2d = tsne.fit_transform(X)
>>> # Visualize the data
>>> plt.scatter(X_2d[: 0] X_2d[: 1] c=y)
<matplotlib.collections.PathCollection object at ...>
fit_transform
由于TSNE不能应用于新数据,我们需要使用它的fit_transform方法。
sklearn.manifold.TSNE即使它无法访问类别信息,也可以很好地区分不同类别的数字。
>>>
>>> from sklearn.datasets import load_digits
>>> digits = load_digits()
>>> # ...
相关笔记:
用Python做科学计算(工具篇)——scikit-learn(机器学习)5
用Python做科学计算(工具篇)——scikit-learn(机器学习)4
用Python做科学计算(工具篇)——scikit-learn(机器学习)3
用Python做科学计算(工具篇)——scikit-learn(机器学习)2
用Python做科学计算(工具篇)——scikit-learn(机器学习)1
用Python做科学计算(工具篇)——1.1. NumPy 数组对象
用Python做科学计算(工具篇)——numpy1.2.数组的数值运算
用Python做科学计算(工具篇)——numpy1.3 更精细的数组
用Python做科学计算(工具篇)——numpy1.4 高级操作
用Python做科学计算——matplotlib绘图实例
用Python做科学计算(工具篇)——scipy 使用指南
用Python做科学计算(工具篇)——sympy使用指南(符号运算)