昨天我们稍微讲了一下如何透过一些基本的图来让在做资料分析的时候有一个初步的认识
但有的时候我们的资料维度还是实在太多了,这个时候适当的使用一些降维技巧也可以帮助我们建立起对於资料的基本理解
明明是表示10个不同资讯的维度的资料,为什麽可以降到2维或3维呢?
其实是因为通常原始资料的不同维度之间其实不是独立的,而在降维的过程就好像是在做图片压缩一样,能用比较少的维度来表示原来资料大部分的资讯内容
对於维度特别高而每个维度所蕴含的资讯又没有那麽密集的时候,就有可能会有维度灾难的产生,因此适当的压缩一下维度对解决这个现象有一定程度的帮助
就好像牛奶加到红茶里面里面一样,今天既然用了比较低的维度去表示原来的资料,表示几乎一定会有一部分的资讯被遗失,而且有些降维方式并不具备可以直接反转换回本来维度的意义,因此要如何解释新的维度也是一个需要思考的问题。
可以拿来降维的方式有很多,我这边主要以比较常用的四种为例子
# 范例资料使用鸢尾花资料集
iris = sns.load_dataset('iris')
iris_feature = iris.iloc[:,:4]
from sklearn.decomposition import PCA
pca = PCA(n_components=2, copy=True, whiten=False) # 建立转换器
iris_pca = pca.fit_transform(iris_feature) # 转换
df_tsne = pd.DataFrame({
"Dim1":iris_pca[:,0],
"Dim2":iris_pca[:,1],
"Label": iris["species"]
}) # 重建DataFrame
ax = sns.scatterplot(x="Dim1", y="Dim2", hue="Label",
data=df_tsne) # 绘图
输出:
# 建立tsne转换器
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, init='pca', random_state=0,perplexity=3) # 困惑度慎选
iris_tsne = tsne.fit_transform(iris_feature)
df_tsne = pd.DataFrame({
"Dim1":iris_tsne[:,0],
"Dim2":iris_tsne[:,1],
"Label": iris["species"]
})# 重建DataFrame
ax = sns.scatterplot(x="Dim1", y="Dim2", hue="Label",
data=df_tsne)# 绘图
输出:
from sklearn.decomposition import TruncatedSVD
svd = TruncatedSVD(n_components=2)
iris_svd = svd.fit_transform(iris_feature)
df_svd = pd.DataFrame({
"Dim1":iris_svd[:,0],
"Dim2":iris_svd[:,1],
"Label": iris["species"]
})
ax = sns.scatterplot(x="Dim1", y="Dim2", hue="Label",
data=df_svd)
输出:
哦对了这个转换出来的会是离散的结果哦,稍微提醒一下
# 建立SOM
from minisom import MiniSom
som = MiniSom(x=20, y= 20, input_len= 4, random_seed=1)
som.train_batch(data=iris_feature.values.tolist(), num_iteration= 1000)
# 绘图
plt.figure(figsize=(15,15))
plt.xlim(0, 10)
plt.ylim(10, 20)
for index, row in iris.iterrows():
x,y = som.winner(list(row[:-1]))
if row.species == "setosa":
plt.text(x,y,"A",fontdict={'weight': 'bold', 'size': 10},color = "C1")
# plt.plot(x,y,color = "C1")
elif row.species == "versicolor":
plt.text(x,y,"B",fontdict={'weight': 'bold', 'size': 10},color = "C3")
# plt.plot(x,y,color = "C3")
elif row.species == "virginica":
plt.text(x,y,"C",fontdict={'weight': 'bold', 'size': 10},color = "C4")
>>: Day_26: 让 Vite 来开启你的Vue之 跌入深坑_ 我该用 reactive 还是 ref
什麽是 SQLite SQLite 是遵守ACID的关联式资料库管理系统,基於单一文件所组成且格式定...
大家好,我是长风青云,今天是铁人赛第七天。 因为收假有点不开心,所以今天影片比较短,也算是补偿前面几...
stimulus 这套框架主要在尽可能避免繁重的工作。为了能够让大量的介面互动维持在单纯的 请求-回...
大二修企业资料通讯(BDC)时,对於IP位址的计算一窍不通,上网看教学影片、文章仍然无法学会,後来...
常常有人说创业需要勇气,但绝非这麽简单,创业不只需要勇气还需要运气、人脉、执着 人脉 相信不用说很多...