Python 无监督聚类的神经网络实现

Python 无监督聚类的神经网络实现,python,tensorflow,Python,Tensorflow,我对神经网络比较陌生,所以我尝试将其用于无监督聚类。我的数据在dataframe中,有5个不同的列(特性),我想从中得到4个类,请参见下面的完整模型 从sklearn导入预处理为pp 从sklearn.model\u选择导入列车\u测试\u拆分 从sklearn.model_选择导入分层折叠 从sklearn.metrics导入日志\u损失 从sklearn.metrics导入精度\召回\曲线、平均精度\分数 从sklearn.metrics导入roc_曲线、auc、roc_auc_得分 进口

我对神经网络比较陌生,所以我尝试将其用于无监督聚类。我的数据在
dataframe
中,有5个不同的列(特性),我想从中得到4个类,请参见下面的完整模型


从sklearn导入预处理为pp
从sklearn.model\u选择导入列车\u测试\u拆分
从sklearn.model_选择导入分层折叠
从sklearn.metrics导入日志\u损失
从sklearn.metrics导入精度\召回\曲线、平均精度\分数
从sklearn.metrics导入roc_曲线、auc、roc_auc_得分
进口干酪
从keras导入后端为K
从keras.models导入顺序、模型
从keras.layers导入激活、致密、脱落、平坦
从keras.layers导入批次标准化、输入、Lambda
从keras导入正则化器
从keras.com导入mse,分类交叉熵
模型=顺序()
model.add(密集(32,activation='relu',input_shape=[5]))
model.add(展平())
添加(密集(单位=32,激活=relu'))
添加(密集(单位=16,激活=relu'))
添加(密集(单位=4,激活=relu'))
添加(密集(4,activation=“softmax”))
compile(optimizer='adam',loss=“categorical_crossentropy”,metrics=['accurity']))

当我给出生成4个类的选项时,我得到错误消息:

ValueError:形状(无,5)和(无,4)不兼容

我不知道我做错了什么。我尝试使用不同的损失函数,相同的错误

我输入数据时出错

out_class = model.fit(x=pd_pca_std,
                      y=pd_pca_std,
                      epochs=num_epochs,
                      batch_size=batch_size,
                      shuffle=True,
                      validation_data=(pd_pca_std, pd_pca_std),
                      verbose=1)
这些值是

batch_size = 33
epochs = 20
num_classes = 4
input_shape = (990000, 5)
output_shape = (990000, 4)

我建议改为使用5个类或与5个类相关的东西。我会解释的

因此,在神经网络和机器学习中,通常在TensorFlow的背景中会发生某些矩阵运算。因此,假设我创建以下内容:

import numpy as np

x = np.random.random((3, 4))
y = np.random.random((3, 3))

np.dot(x, y)  # if I try multiplying 2 incompatible matrices, the program will fail :(
所以这里发生的事情是,对于简单的矩阵运算来说,矩阵是不兼容的,因为它们需要特定的形状才能兼容。因此,我建议你要么改变有问题的矩阵/数组的形状,要么在程序中使用不同的形状,看看哪个会成功

你也可以学习一些线性代数,它有矩阵运算和算术的规则,但我现在不想讨论这个问题。然而,我要做的是给你留下一个链接,让你看看这个主题,这样你就知道以后该做什么了

这是:

希望这有助于。。。
祝你有愉快的一天:)

这是我如何复制你的问题并让它工作的框架

from sklearn import preprocessing as pp
from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import log_loss
from sklearn.metrics import precision_recall_curve, average_precision_score
from sklearn.metrics import roc_curve, auc, roc_auc_score

import numpy as np

import keras
from keras import backend as K
from keras.models import Sequential, Model
from keras.layers import Activation, Dense, Dropout , Flatten
from keras.layers import BatchNormalization, Input, Lambda
from keras import regularizers
from keras.losses import mse, categorical_crossentropy

X = '''input data here as an array''' # I used X = np.zeros((990000, 5))
y = '''output data here as an array'''#I used y = np.ones((990000, 4))

batch_size = 33 
num_epochs = 20 
num_classes = 4

model = Sequential()
model.add(Dense(32, activation='relu',input_shape=X.shape[1:])) #Input shape = 5
model.add(Flatten())
model.add(Dense(units=32, activation='relu'))
model.add(Dense(units=16, activation='relu'))
model.add(Dense(units=4, activation='relu'))
model.add(Dense(y.shape[1], activation = "softmax")) #Output = y.shape[1] = 4
model.compile(optimizer='adam',loss="categorical_crossentropy",metrics=['accuracy'])

model.summary() #Will show you a summary of the model

model.fit(x=X, y=y,epochs=num_epochs, batch_size=batch_size, shuffle=True,validation_data=(X,y),verbose=1) #You may want to use different variables in your validation.

发布代码,允许人们复制您的问题。我已经添加了所有导入库。使用
keras
tf.keras
运行该库时没有错误。当我创建最后一层5时,与输入的列数相同,它运行时没有错误。但是,我感兴趣的是只有4个类。这个网络不做聚类,你的意思是使用自动编码器吗?谢谢,事实上,如果我使用的类数与输入列的形状相同,它就会工作,所以我只想知道,对于无监督聚类中的神经网络,聚类数是否必须与输入形状相同。啊,好的。为了知识起见,我的回答解决了你的问题吗?我想补充一点,这将运行并能够进行预测,但我认为它不会像你试图做的那样。感谢这些,它确实有效,我的理解是,最后的密集层必须具有与输出相同的维度。但是对于没有标签的无监督学习,现在运行它只是为了查看结果。如果它确实对你有效,请标记答案它有效,从这个意义上说,我必须使y与所需的输出相同,x=(8000,5)和y=(8000,4)才能得到4个类。我不知道为什么我真的不能解释它为什么工作,或者我得到的输出是否正确。