我在链接中以 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?(我的意思是我有点用我的眼睛来决定什么是最好的,但我确信这个任务有一种计算方法)。
很想听听意见和建议,这是一个单独的项目,是试图在获得物理学学士学位后更好地理解数据科学的一部分。
提前致谢!
