R/Python 中有哪些可用的方法/实现来丢弃/选择数据中不重要/重要的特征?我的数据没有标签(无监督)。
数据有大约 100 个混合类型的特征。有些是数字的,有些是二进制的(0/1)。
R/Python 中有哪些可用的方法/实现来丢弃/选择数据中不重要/重要的特征?我的数据没有标签(无监督)。
数据有大约 100 个混合类型的特征。有些是数字的,有些是二进制的(0/1)。
它已经有一年了,但我仍然觉得它是相关的,所以我只想分享我在查尔斯在他的回答中链接到的论文中提出的主要特征分析 (PFA) 的python 实现。
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from collections import defaultdict
from sklearn.metrics.pairwise import euclidean_distances
from sklearn.preprocessing import StandardScaler
class PFA(object):
def __init__(self, n_features, q=None):
self.q = q
self.n_features = n_features
def fit(self, X):
if not self.q:
self.q = X.shape[1]
sc = StandardScaler()
X = sc.fit_transform(X)
pca = PCA(n_components=self.q).fit(X)
A_q = pca.components_.T
kmeans = KMeans(n_clusters=self.n_features).fit(A_q)
clusters = kmeans.predict(A_q)
cluster_centers = kmeans.cluster_centers_
dists = defaultdict(list)
for i, c in enumerate(clusters):
dist = euclidean_distances([A_q[i, :]], [cluster_centers[c, :]])[0][0]
dists[c].append((i, dist))
self.indices_ = [sorted(f, key=lambda x: x[1])[0][0] for f in dists.values()]
self.features_ = X[:, self.indices_]
你可以像这样使用它:
import numpy as np
X = np.random.random((1000,1000))
pfa = PFA(n_features=10)
pfa.fit(X)
# To get the transformed matrix
X = pfa.features_
# To get the column indices of the kept features
column_indices = pfa.indices_
这严格遵循文章中描述的算法。我认为该方法很有前景,但老实说,我认为它不是无监督特征选择最可靠的方法。如果我想出更好的东西,我会发布更新。
R 中的sparcl包执行稀疏分层和稀疏 K-means 聚类。这可能很有用。http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2930825/
主要特征分析看起来是无监督特征选择的解决方案。本文对此进行了描述。
我发现了一个很有用的链接,这些是 matlab 实现,它们可能对你有用 http://www.cad.zju.edu.cn/home/dengcai/Data/MCFS.html 这是一个多集群功能选择方法,你可以在最近的论文中找到关于它的坚实基础让我知道它是否适合你