我有一个问题,我得到一组图片,需要对这些图片进行分类.
问题是,我真的不知道这些图像.因此,我计划使用尽可能多的描述符,然后对其进行PCA以仅识别对我有用的描述符.
如果有帮助,我可以对很多数据点进行监督学习.但是,图片有可能相互连接.这意味着可能有从Image X到Image X + 1的开发,尽管我希望这可以通过每个Image中的信息进行整理.
我的问题是:
编辑:我找到了一个整洁的工具包,我目前正在尝试这个:http://scikit-image.org/那里似乎有一些描述符.有没有办法进行自动特征提取,并根据对目标分类的描述能力对特征进行排名?PCA应该能够自动排名.
编辑2:我的数据存储框架现在更加精细了.我将使用Fat系统作为数据库.我将为每个类组合的实例提供一个文件夹.因此,如果图像属于第1类和第2类,则会有一个包含这些图像的文件夹img12.这样我就可以更好地控制每个班级的数据量.
编辑3:我找到了一个python的libary(sklearn)的例子,它做了我想做的事情.它是关于识别手写数字.我正在尝试将我的数据集转换为我可以使用的数据集.
这是我发现使用sklearn的例子:
import pylab as pl
# Import datasets, classifiers and performance metrics
from sklearn import datasets, svm, metrics
# The digits dataset
digits = datasets.load_digits()
# The data that we are interested in is made of 8x8 images of digits,
# let's have a look at the first 3 images, stored in the `images`
# attribute of the dataset. If we were working …Run Code Online (Sandbox Code Playgroud) 我尝试使用matplotlib.mlab.PCA进行简单的主成分分析但是使用类的属性我无法得到一个干净的解决方案来解决我的问题.这是一个例子:
在2D中获取一些虚拟数据并启动PCA:
from matplotlib.mlab import PCA
import numpy as np
N = 1000
xTrue = np.linspace(0,1000,N)
yTrue = 3*xTrue
xData = xTrue + np.random.normal(0, 100, N)
yData = yTrue + np.random.normal(0, 100, N)
xData = np.reshape(xData, (N, 1))
yData = np.reshape(yData, (N, 1))
data = np.hstack((xData, yData))
test2PCA = PCA(data)
Run Code Online (Sandbox Code Playgroud)
现在,我只想将主要组件作为原始坐标中的向量,并将它们绘制为我的数据上的箭头.
什么是快速而干净的方式到达那里?
谢谢Tyrax
我正在尝试使用python进行分类.我正在使用Naive Bayes MultinomialNB分类器用于网页(从网络检索数据到文本,稍后我将此文本分类为:web分类).
现在,我正在尝试对这些数据应用PCA,但是python会给出一些错误.
我的朴素贝叶斯分类代码:
from sklearn import PCA
from sklearn import RandomizedPCA
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
vectorizer = CountVectorizer()
classifer = MultinomialNB(alpha=.01)
x_train = vectorizer.fit_transform(temizdata)
classifer.fit(x_train, y_train)
Run Code Online (Sandbox Code Playgroud)
这种天真的贝叶斯分类给出了输出:
>>> x_train
<43x4429 sparse matrix of type '<class 'numpy.int64'>'
with 6302 stored elements in Compressed Sparse Row format>
>>> print(x_train)
(0, 2966) 1
(0, 1974) 1
(0, 3296) 1
..
..
(42, 1629) 1
(42, 2833) 1
(42, 876) 1
Run Code Online (Sandbox Code Playgroud)
比我尝试在我的数据上应用PCA(temizdata):
>>> v_temizdata = vectorizer.fit_transform(temizdata) …Run Code Online (Sandbox Code Playgroud) 与sklearn的PCA不同,TruncatedSVD的解释方差比率不是降序.我查看了源代码,似乎他们使用不同的方式计算解释的方差比:
U, Sigma, VT = randomized_svd(X, self.n_components,
n_iter=self.n_iter,
random_state=random_state)
X_transformed = np.dot(U, np.diag(Sigma))
self.explained_variance_ = exp_var = np.var(X_transformed, axis=0)
if sp.issparse(X):
_, full_var = mean_variance_axis(X, axis=0)
full_var = full_var.sum()
else:
full_var = np.var(X, axis=0).sum()
self.explained_variance_ratio_ = exp_var / full_var
Run Code Online (Sandbox Code Playgroud)
PCA:
U, S, V = linalg.svd(X, full_matrices=False)
explained_variance_ = (S ** 2) / n_samples
explained_variance_ratio_ = (explained_variance_ /
explained_variance_.sum())
Run Code Online (Sandbox Code Playgroud)
PCA使用sigma直接计算explain_variance,由于sigma按降序排列,explain_variance也按降序排列.另一方面,TruncatedSVD使用变换矩阵的列的方差来计算explain_variance,因此方差不一定按降序排列.
这是否意味着我需要explained_variance_ratio从头TruncatedSVD开始排序才能找到前k个主要组件?
princomp()在R中使用函数时,遇到以下错误:"covariance matrix is not non-negative definite".
我认为,这是由于协方差矩阵中的某些值为零(实际上接近零,但在舍入期间变为零).
当协方差矩阵包含零时,是否有解决方法可以继续使用PCA?
[仅供参考:获得协方差矩阵是princomp()通话中的一个中间步骤.重现此错误的数据文件可以从这里下载 - http://tinyurl.com/6rtxrc3]
我正在处理一个包含10000个数据点和100个变量的数据集.不幸的是,我所拥有的变量没有以良好的方式描述数据.我使用了PCA分析prcomp(),前3台PC似乎占据了数据的大部分可变性.据我了解,主要成分是不同变量的组合; 因此它具有对应于每个数据点的特定值,并且可以被视为新变量.我能将这些主要组件作为3个新变量添加到我的数据中吗?我需要它们进行进一步分析.
可重现的数据集:
set.seed(144)
x <- data.frame(matrix(rnorm(2^10*12), ncol=12))
y <- prcomp(formula = ~., data=x, center = TRUE, scale = TRUE, na.action = na.omit)
Run Code Online (Sandbox Code Playgroud) 通常PCA变换很容易被反转:
import numpy as np
from sklearn import decomposition
x = np.zeros((500, 10))
x[:, :5] = random.rand(500, 5)
x[:, 5:] = x[:, :5] # so that using PCA would make sense
p = decomposition.PCA()
p.fit(x)
a = x[5, :]
print p.inverse_transform(p.transform(a)) - a # this yields small numbers (about 10**-16)
Run Code Online (Sandbox Code Playgroud)
现在,如果我们尝试添加whiten = True参数,结果将完全不同:
p = decomposition.PCA(whiten=True)
p.fit(x)
a = x[5, :]
print p.inverse_transform(p.transform(a)) - a # now yields numbers about 10**15
Run Code Online (Sandbox Code Playgroud)
所以,因为我没有找到任何其他可以做到这一点的方法,所以我觉得如何才能获得原始值?或者它甚至可能吗?非常感谢您的帮助.
我有一个数据集,2M行×7列,具有不同的家庭功耗测量值,每个测量的日期.
我将我的数据集放入pandas数据框中,选择除日期列之外的所有列,然后执行交叉验证拆分.
import pandas as pd
from sklearn.cross_validation import train_test_split
data = pd.read_csv('household_power_consumption.txt', delimiter=';')
power_consumption = data.iloc[0:, 2:9].dropna()
pc_toarray = power_consumption.values
hpc_fit, hpc_fit1 = train_test_split(pc_toarray, train_size=.01)
power_consumption.head()
Run Code Online (Sandbox Code Playgroud)

我使用K-means分类,然后显示PCA降维.
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
from sklearn.decomposition import PCA
hpc = PCA(n_components=2).fit_transform(hpc_fit)
k_means = KMeans()
k_means.fit(hpc)
x_min, x_max = hpc[:, 0].min() - 5, hpc[:, 0].max() - 1
y_min, y_max = hpc[:, 1].min(), hpc[:, 1].max() + 5 …Run Code Online (Sandbox Code Playgroud) 我在Rw /中看到了这个教程autoplot.他们绘制了负载和加载标签:
autoplot(prcomp(df), data = iris, colour = 'Species',
loadings = TRUE, loadings.colour = 'blue',
loadings.label = TRUE, loadings.label.size = 3)
Run Code Online (Sandbox Code Playgroud)
https://cran.r-project.org/web/packages/ggfortify/vignettes/plot_pca.html
我更喜欢Python 3w/matplotlib, scikit-learn, and pandas进行数据分析.但是,我不知道如何添加这些?
你怎么能用这些载体绘制matplotlib?
我一直在阅读使用sklearn在PCA中恢复explain_variance_ratio_的功能名称,但尚未弄清楚
这是我如何绘制它 Python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn import decomposition
import seaborn as sns; sns.set_style("whitegrid", {'axes.grid' : False})
%matplotlib inline
np.random.seed(0)
# Iris …Run Code Online (Sandbox Code Playgroud) 假设我有从1951年到1980年的100个站点的年降水量数据.在一些论文中,我发现人们将PCA应用于时间序列,然后绘制空间载荷图(值为-1到1),并绘制时间序列个人电脑 例如,https://publicaciones.unirioja.es/ojs/index.php/cig/article/view/2931/2696中的图6 是PC的空间分布.
我prcomp在R中使用函数,我想知道我怎么能做同样的事情.换句话说,如何从prcomp函数的结果中提取"空间模式"和"时间模式" ?谢谢.
set.seed(1234)
rainfall = sample(x=100:1000,size = 100*30,replace = T)
rainfall=matrix(rainfall,nrow=100)
colnames(rainfall)=1951:1980
PCA = prcomp(rainfall,retx=T)
Run Code Online (Sandbox Code Playgroud)
pca ×10
python ×6
scikit-learn ×4
r ×3
biplot ×1
dataframe ×1
date ×1
descriptor ×1
eigenvector ×1
image ×1
k-means ×1
matplotlib ×1
naivebayes ×1
princomp ×1
python-2.7 ×1
spatial ×1
statistics ×1
svd ×1
svm ×1
temporal ×1
variables ×1