gpt4 book ai didi

python - 为什么我的 sklearn MDS(多维缩放)可视化看起来如此无信息(完美的圆形和圆形)?

转载 作者:太空宇宙 更新时间:2023-11-03 20:51:51 25 4
gpt4 key购买 nike

我使用随机森林计算了大约 1000 个数据点的邻近矩阵,但使用 sklearn 的 MDS 可视化该矩阵的结果非常奇怪且难以推理。

我用来处理数据的代码如下:

data_url = "https://raw.githubusercontent.com/ychennay/ychennay.github.io/master/KAG_conversion_data.csv"

# read data into memory and drop columns
data_string = requests.get(data_url).content
conversions_df = pd.read_csv(StringIO(data_string.decode("utf-8"))
)

ad_ids = conversions_df["ad_id"].tolist()

conversions_df = pd.read_csv(StringIO(data_string.decode("utf-8"))
).drop(columns=COLUMNS_TO_DROP)

conversions_df["bias"] = 1 # add a bias/intercept column

# define the target
y = conversions_df[TARGET]

# define features
X = conversions_df.loc[:, ~conversions_df.columns.isin(TARGET)]

# using dictionary convert columns into categorical data types
convert_dict = {'gender': "category",
'interest':"category",
"age": "category"}

conversions_df = conversions_df.astype(convert_dict)
dummified_data = pd.get_dummies(conversions_df, drop_first=True) # get dummy features for categorical variables

TARGET = ["Approved_Conversion"]
y = dummified_data[TARGET].values.reshape(-1)
X = dummified_data.loc[:, ~dummified_data.columns.isin(TARGET)]
conversions_df = conversions_df.astype(convert_dict)

经过此预处理后,我通过 RandomForestRegressor 运行它,尝试预测 Approved_Conversions 作为目标:

from sklearn.ensemble import RandomForestRegressor

B = 500
rf = RandomForestRegressor(n_estimators=B)
rf.fit(X, y)

final_positions = rf.apply(X)
proximity_matrix = np.zeros((len(X), len(X)))
# adapted implementation found here: h
# https://stackoverflow.com/questions/18703136/proximity-matrix-in-sklearn-ensemble-randomforestclassifier
for tree_idx in range(B):
proximity_matrix += np.equal.outer(final_positions[:,tree_idx],
final_positions[:,tree_idx]).astype(float)
# divide by the # of estimators
proximity_matrix /= B

distance_matrix = 1 - proximity_matrix
distance_matrix = pd.DataFrame(distance_matrix, columns=ad_ids, index=ad_ids)

但是,当我绘制 MDS 可视化时,可视化是完美的圆形,并且信息量不大。我预计数据中有一些连贯的簇与最相似的数据点组相对应:

from sklearn.manifold import MDS
# from sklearn.decomposition import PCA
mds = MDS(n_components=2,dissimilarity='precomputed')
reduced_dimensions = mds.fit_transform(distance_matrix)

enter image description here

如果我尝试将 MDS 与 proximity_matrix 结合使用,它或多或少具有相同的模式:

enter image description here

我对 MDS 不是最熟悉,但我无法解释为什么当大多数在线文章都建议使用该算法来可视化距离/相似度矩阵时,该算法给了我最差的结果。

我还验证了矩阵的实际结果是有意义的。例如,当我获得与特定 Facebook 广告最相似的广告(数据集是付费 Facebook 事件绩效)时,我得到的结果确实有意义(我输入的广告突出显示,最相似的结果显示在下面) : enter image description here

任何人都可以给我一些指示,告诉我我可能做错了什么吗?如果我使用 PCA 减少维度,我会得到更“正常”的结果(至少方差在两个主成分中都扩展了):

enter image description here

最佳答案

我相信问题出在这一行reduced_dimensions = mds.fit_transform(distance_matrix)您正在拟合模型,然后转换结果,而不是缩放输入数据并拟合模型。

我认为以这种方式进行操作会导致它被操纵成正态分布,在多个变量的情况下会生成钟形曲线或椭圆形。如果您尝试 mds.fit(distance_matrix) 会发生什么?

抱歉,因为这作为评论更有意义,我只是还不允许发表评论。

关于python - 为什么我的 sklearn MDS(多维缩放)可视化看起来如此无信息(完美的圆形和圆形)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56266787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com