实现一种混合数据聚类和线性回归的算法

数据挖掘 Python 聚类 线性回归 主成分分析
2022-03-02 13:35:19

在链接中以 csv 格式提供了以下数据框,它传达了有关星星的信息。

更具体地说 - 列 ID 表示样本的任意 ID。z 列代表我的目标变量(响应)。其他列表示每个样本(预测变量)的可用属性及其相应的测量误差。

我使用以下代码将 11D 数据减少到 3 个主成分,并绘制了数据在主空间中的散点图(用颜色指示目标变量 Z)

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

#first we remove the target z and ID from the dataset and standredize it (mean=0 and std=1)
pca = PCA(n_components=3)
data_for_pca=data_clean.iloc[:,2:13]
data_for_pca=StandardScaler().fit_transform(data_for_pca)
#now we perform the pca and get the amount of variance, or relative information that each new component holds. 
principal_c=pca.fit_transform(data_for_pca)
pd.DataFrame(pca.explained_variance_ratio_).transpose()

import matplotlib.cm as cmx
from mpl_toolkits.mplot3d import Axes3D
def scatter3d(x,y,z, cs, colorsMap='jet'):
    cm = plt.get_cmap(colorsMap)
    cNorm = matplotlib.colors.Normalize(vmin=min(cs), vmax=max(cs))
    scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cm)
    fig6 = plt.figure()
    ax6 = Axes3D(fig6)
    ax6.scatter(x, y, z, c=scalarMap.to_rgba(cs))
    ax6.set_xlabel('pc1',fontweight='bold')
    ax6.set_ylabel('pc2',fontweight='bold')
    ax6.set_zlabel('pc3',fontweight='bold')

    scalarMap.set_array(cs)
    fig6.colorbar(scalarMap)

    plt.show()
scatter3d(principal_c[:,0],principal_c[:,1], principal_c[:,2],np.array(data.iloc[:,1]))

我附上了数据框和代码,以便任何人都可以从各个方向重现和观察 3d 图,我对这个问题的主要目的是检查我对结果的直观分析是否良好,以及如何实现我的想法,从预测数据中预测 z .

我看到这些点在(-2.5,-1,-0.25)处居中 - 粗略地说 - 有点平滑的球形渐变。也许我应该实现某种高斯内核?如果这是个好主意,我该如何实施?

另一个观察结果是数据略微聚集在“板块”中(可以看出 在这幅图片中.

也许我应该为每个集群/板块执行单独的线性回归。并让算法将每个点分类为一个簇/板,然后对于每个簇/板,我可以用更敏感的线性回归系数推断目标。

如果您认为这可能有效,我应该如何实施它?

也许有更严格的方法来进一步分析 PCA?(我的意思是我有点用我的眼睛来决定什么是最好的,但我确信这个任务有一种计算方法)。

很想听听意见和建议,这是一个单独的项目,是试图在获得物理学学士学位后更好地理解数据科学的一部分。

提前致谢!

1个回答

您数据中的许多值似乎大小相同,或者差异很小,而且处理噪声似乎很重要。同样的问题也适用于图像压缩。我认为一个好的方法是使用 Haar-Wavelet 变换,它可以大量压缩信息并减少噪声数据,就像图像压缩一样。在transofrm之后,您需要对结果数据进行量化,在这里您可以简单地将所有值设置为零,这些值在某个界限之前具有最小的绝对值,其余值您也可以量化成组,如果它们的差异小于一些束缚。通过这样做,您可以消除所有噪音。从这里您必须更准确地指定接下来要实现的目标。你想预测z?对于此任务,您可以简单地使用决策树学习方法,使用最大信息增益来决定哪个属性进行第一次拆分。随机森林使用了很多不同的决策树,每个决策树都可以被视为特定任务的专家,应该在这些数据上给出非常好的结果,一个好的量化方法对树非常重要。您也可以自己实现它们,而不使用任何黑盒库,您可以自己从实现者那里学到更多。“McGrawHill_-_Machine_Learning_-Tom_Mitchell”对这些算法有很好的解释,解释了所有这些黑盒式方法背后的机制。应该在这个数据上给出非常好的结果,一个好的量化方法对树非常重要。您也可以自己实现它们,而不使用任何黑盒库,您可以自己从实现者那里学到更多。“McGrawHill_-_Machine_Learning_-Tom_Mitchell”对这些算法有很好的解释,解释了所有这些黑盒式方法背后的机制。应该在这个数据上给出非常好的结果,一个好的量化方法对树非常重要。您也可以自己实现它们,而不使用任何黑盒库,您可以自己从实现者那里学到更多。“McGrawHill_-_Machine_Learning_-Tom_Mitchell”对这些算法有很好的解释,解释了所有这些黑盒式方法背后的机制。