- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用以下代码对 iris 数据集执行 PCA:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# get iris data to a dataframe:
from sklearn import datasets
iris = datasets.load_iris()
varnames = ['SL', 'SW', 'PL', 'PW']
irisdf = pd.DataFrame(data=iris.data, columns=varnames)
irisdf['Species'] = [iris.target_names[a] for a in iris.target]
# perform pca:
from sklearn.decomposition import PCA
model = PCA(n_components=2)
scores = model.fit_transform(irisdf.iloc[:,0:4])
loadings = model.components_
# plot results:
scoredf = pd.DataFrame(data=scores, columns=['PC1','PC2'])
scoredf['Grp'] = irisdf.Species
sns.lmplot(fit_reg=False, x="PC1", y='PC2', hue='Grp', data=scoredf) # plot point;
loadings = loadings.T
for e, pt in enumerate(loadings):
plt.plot([0,pt[0]], [0,pt[1]], '--b')
plt.text(x=pt[0], y=pt[1], s=varnames[e], color='b')
plt.show()
我得到以下情节:
但是,当我与其他网站的绘图(例如 http://marcoplebani.com/pca/ )进行比较时,我的绘图不正确。似乎存在以下差异:
为什么我的情节不正确。错误在哪里以及如何纠正?
最佳答案
这取决于您是否缩放方差。 “其他站点”使用 scale=TRUE
。如果您想使用 sklearn 执行此操作,请在拟合模型之前添加 StandardScaler
并使用缩放后的数据拟合模型,如下所示:
from sklearn.preprocessing import StandardScaler
X = StandardScaler().fit_transform(irisdf.iloc[:,0:4])
scores = model.fit_transform(X)
StandardScaler
和 normalize
之间的区别这里是an answer它指出了一个关键的区别(行与列)。即使您在这里使用 normalize
,您也可能需要考虑 X = normalize(X.T).T
。下面的代码显示了转换后的一些差异:
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler, normalize
iris = datasets.load_iris()
varnames = ['SL', 'SW', 'PL', 'PW']
fig, ax = plt.subplots(2, 2, figsize=(16, 12))
irisdf = pd.DataFrame(data=iris.data, columns=varnames)
irisdf.plot(kind='kde', title='Raw data', ax=ax[0][0])
irisdf_std = pd.DataFrame(data=StandardScaler().fit_transform(irisdf), columns=varnames)
irisdf_std.plot(kind='kde', title='StandardScaler', ax=ax[0][1])
irisdf_norm = pd.DataFrame(data=normalize(irisdf), columns=varnames)
irisdf_norm.plot(kind='kde', title='normalize', ax=ax[1][0])
irisdf_norm = pd.DataFrame(data=normalize(irisdf.T).T, columns=varnames)
irisdf_norm.plot(kind='kde', title='normalize', ax=ax[1][1])
plt.show()
我不确定我能对算法/数学进行深入研究。 StandardScaler
的要点是获得跨特征的统一/一致的均值和方差。假设具有大测量单位的变量不一定(也不应该)在 PCA 中占主导地位。换句话说,StandardScaler 使功能对 PCA 的贡献同等。正如您所看到的,归一化
不会给出一致的均值或方差。
关于python - 没有运行时错误,但虹膜 PCA 绘图错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49736849/
我正在尝试一些非常简单的事情,从我正在构建的应用程序的松弛命令中获取信息,并且由于我是 Go 的新手,我发现 Iris 是一个非常好的框架,所以我决定使用它和它实际工作的网站上的示例 https://
我知道 Go 不是一种面向对象的语言,但我正在尝试按照 this 的建议在我的 Iris Controller 中实现一个继承结构。文章。我这样做的主要动机是避免重复。到目前为止,它一直在为我工作。例
我是一名优秀的程序员,十分优秀!