做網(wǎng)站流量的方法拼多多seo搜索優(yōu)化
t-sne
t-SNE(t-分布隨機(jī)鄰域嵌入,t-distributed Stochastic Neighbor Embedding)是由 Laurens van der Maaten 和 Geoffrey Hinton 于 2008 年提出的一種非線性降維技術(shù)。它特別適合用于高維數(shù)據(jù)的可視化。t-SNE 的主要目標(biāo)是將高維數(shù)據(jù)映射到低維空間(通常是二維或三維),同時(shí)盡可能地保留高維數(shù)據(jù)中的局部結(jié)構(gòu)。這使得我們可以在低維空間中更直觀地觀察數(shù)據(jù)的結(jié)構(gòu)和分布。
t-SNE 能很好地保留高維數(shù)據(jù)的局部結(jié)構(gòu),適用于各種類型的數(shù)據(jù),尤其是復(fù)雜的非線性數(shù)據(jù)。但它的計(jì)算復(fù)雜度較高,不適合非常大規(guī)模的數(shù)據(jù)集,對(duì)超參數(shù)(如 perplexity)較為敏感,需要仔細(xì)調(diào)參。低維空間中的全局結(jié)構(gòu)不一定可靠。
可視化
要使用 t-SNE 進(jìn)行數(shù)據(jù)可視化,可以使用 Python 的 scikit-learn 庫。隨機(jī)生成兩個(gè)數(shù)據(jù)集:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.manifold import TSNE# 假設(shè)這里有兩個(gè)數(shù)據(jù)集,分別是 dataset1 和 dataset2
dataset1 = np.random.randn(100, 10) # 生成隨機(jī)數(shù)據(jù)作為示例
dataset2 = np.random.randn(80, 10)# 合并數(shù)據(jù)集
merged_data = np.concatenate((dataset1, dataset2))# 對(duì)合并后的數(shù)據(jù)應(yīng)用 t-SNE 進(jìn)行降維
tsne = TSNE(n_components=2, random_state=0)
tsne_data = tsne.fit_transform(merged_data)# 將降維后的數(shù)據(jù)按照原來的數(shù)據(jù)集進(jìn)行劃分
tsne_data_1 = tsne_data[:len(dataset1)]
tsne_data_2 = tsne_data[len(dataset1):]# 繪制散點(diǎn)圖
plt.scatter(tsne_data_1[:, 0], tsne_data_1[:, 1], color='b', label='Dataset 1')
plt.scatter(tsne_data_2[:, 0], tsne_data_2[:, 1], color='r', label='Dataset 2')
plt.legend()
plt.show()
根據(jù)數(shù)據(jù)集中不同的標(biāo)簽使用不同的顏色:
import numpy as np
import pandas as pd
from sklearn.manifold import TSNE
import matplotlib.pyplot as pltfrom utils.feature import features18_df = pd.read_csv('68.csv')X = df[features18_] # 選擇需要的特征
y = df["fs"] # 根據(jù)fs標(biāo)簽選擇不同的顏色畫圖# 初始化 t-SNE 模型,設(shè)置降維后的維度為 2 維
tsne = TSNE(n_components=2, perplexity=min(10, len(X)-1))# 對(duì)數(shù)據(jù)進(jìn)行降維
X_tsne = tsne.fit_transform(X)# 繪制結(jié)果
plt.figure(figsize=(10, 10))
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y.astype(int), cmap='jet')
plt.colorbar()
plt.show()
t-SNE的參數(shù)
t-SNE 類的 init 方法定義了用于初始化 t-SNE 對(duì)象的參數(shù)。下面是這些參數(shù)的詳細(xì)介紹:
n_components:int, 默認(rèn)值=2
要降維到的維度數(shù)。通常設(shè)為2或3,用于可視化。
perplexity:float, 默認(rèn)值=30.0
衡量數(shù)據(jù)局部結(jié)構(gòu)的一個(gè)超參數(shù)。較大的 perplexity 使 t-SNE 關(guān)注更大范圍的鄰居數(shù)。有效范圍通常在5到50之間。
early_exaggeration:float, 默認(rèn)值=12.0
在早期階段,增加距離以便于更好地形成群體結(jié)構(gòu)。較高的值使得群體更加分離。
learning_rate:float 或 “auto”, 默認(rèn)值=“auto”
學(xué)習(xí)率。學(xué)習(xí)率過低可能導(dǎo)致優(yōu)化停滯,學(xué)習(xí)率過高可能導(dǎo)致嵌入結(jié)構(gòu)被破壞。當(dāng)設(shè)為 “auto” 時(shí),學(xué)習(xí)率為 max(N / early_exaggeration / 4, 50),其中 N 是樣本數(shù)。
n_iter:int, 默認(rèn)值=1000
梯度下降迭代次數(shù)。增大此值可能會(huì)提升嵌入的質(zhì)量。
n_iter_without_progress:int, 默認(rèn)值=300
在沒有進(jìn)展的情況下提前終止的迭代次數(shù)。用于防止無效計(jì)算。
min_grad_norm:float, 默認(rèn)值=1e-7
最小梯度范數(shù),用于判斷是否收斂。
metric:string 或 callable, 默認(rèn)值=“euclidean”
用于計(jì)算高維空間距離的度量標(biāo)準(zhǔn)。默認(rèn)是歐幾里得距離。
metric_params:dict 或 None, 默認(rèn)值=None
用于度量的額外關(guān)鍵字參數(shù)。
init:string 或 ndarray, 默認(rèn)值=“pca”
低維嵌入的初始化方法??梢允?‘random’ 或 ‘pca’,也可以提供一個(gè)初始位置的數(shù)組。
verbose:int, 默認(rèn)值=0
控制輸出的詳細(xì)程度。0 表示不輸出,1 或更高的值表示輸出更多信息。
random_state:int, RandomState 實(shí)例或 None, 默認(rèn)值=None
隨機(jī)數(shù)生成器的種子。設(shè)置此參數(shù)以獲得可重復(fù)的結(jié)果。
method:string, 默認(rèn)值=“barnes_hut”
用于計(jì)算嵌入的算法??蛇x值有 ‘barnes_hut’(適用于較大數(shù)據(jù)集)和 ‘exact’(適用于較小數(shù)據(jù)集)。
angle:float, 默認(rèn)值=0.5
僅在 method=‘barnes_hut’ 時(shí)使用??刂?Barnes-Hut 近似的精度,值越小精度越高,計(jì)算時(shí)間越長。
n_jobs:int 或 None, 默認(rèn)值=None
并行計(jì)算的 CPU 核心數(shù)。None 表示 1,-1 表示使用所有可用的核心。
生成excel文件
用python的matplotlib庫作出的圖可以看,但并不完美,雖然可以通過調(diào)matplotlib的參數(shù)來使圖畫得更完美,但是不如使用專業(yè)的畫圖軟件方便,比如微軟的visio,愛不釋手,所以我們需要將t-SNE降維的坐標(biāo)點(diǎn)生成一個(gè)excel文件,在畫圖軟件中導(dǎo)入這個(gè)excel文件,使可視化變得更完美。將t-SNE降維后的數(shù)據(jù)保存到Excel文件中,可以使用 pandas 庫中的 to_excel 方法。
df = pd.DataFrame(X_tsne)
writer = pd.ExcelWriter('arr.xlsx')
df.to_excel(writer)
writer.close()