【发布时间】:2020-04-27 00:08:25
【问题描述】:
我正在阅读关于 NN 的内容,并且还想同时生成我的第一个 NN(以补充我的阅读内容)。
我有一个这样的数据集:
DNA_seq Sample1Name Sample1Name ConcOfDNAInSample DNASeqFoundInProcessCat
AGGAG cat_0 cat_1 0.1 found_in_0
AGGAG cat_1 cat_2 0.4 found_in_3
ACCCC cat_1 cat_7 0.1 found_in_2
AGAGAGA cat_2 cat_10 1.9 found_in_1
ADAS cat_332 cat_103 8.9 found_in_1
列:
- DNASeq -> 一串 DNA 序列(即“序列”)
- Sample1Name -> 分类值,解释 DNASeq 所在溶液的化学性质。
- Sample2Name -> 分类值,解释 DNASeq 所在溶液的化学性质。
- ConcOfDNAInSample -> Sample2SName 中 DNA 浓度的定量值。
- DNASeqFoundInProcessCat -> 这是我要预测的标签。它是一个具有四个类别(found_in_0 -> found_in_3)的分类值。这是我对每个 DNASeq 进行了三个测试的输出,看看我是否操纵了原始解决方案(即 found_in_0),DNASeq 是否仍然存在。
我的问题: 对于一组看不见的序列,我希望输出的标签集是 'found_in_1'、'found_in_2'、'found_in_3' 的多类概率。
即如果上面的例子是我的测试集的输出,那么我的输出应该是这样的:
DNA_seq Sample1Name Sample1Name ConcOfDNAInSample DNASeqFoundInProcessCat
AGGAG cat_0 cat_1 0.1 (0.9,0.5,0.1)
AGGAG cat_1 cat_2 0.4 (0.8,0.7,0.3)
ACCCC cat_1 cat_7 0.1 (0.2,0.5,0.3)
AGAGAGA cat_2 cat_10 1.9 (0.7,0.2,0.9)
ADAS cat_332 cat_103 8.9 (0.6,0.8,0.7)
有一些注意事项:
-
1234563 (found_in_1, found_in_2, found_in_3)
我只对 found_in_1、found_in_2 和 found_in_3 类的输出感兴趣(即,我想要最后的三类概率,而不是 found_in_0 的四类概率)。
我能够从 DNA 序列中生成其他特征,这只是一个示例。
从我的数据可以看出,我的数据集是不平衡的,found_in_3 中的数据量明显低于其他(我的完整训练数据大约 80,000 行;但其中只有大约 10,000 行是found_in_3;其他都是found_in_0、found_in_1或found_in_2)。
我要解决的是算法,特别是针对一个特定点。我的想法是:
1.读入数据。
df = pd.read_csv('data')
2.将数据集拆分为训练和测试
import sklearn
from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test = train_test_split(X,y,test_size=0.2,random_state=42)
3. 了解数据集(即我在上面第 4 点中看到代表性不足的地方)。 为此,我有一系列函数……假设我有一个标准化的数据集,即上表。
4.构建神经网络。
import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten, Conv2D
from tensorflow.keras import Model
我知道这里的一般想法是在 keras 中执行此操作的 tensorflow 等效项(即,这是针对“iris”数据集的;我在其中初始化模型,添加一些层和激活函数,编译模型,生成模型的输出,然后拟合模型,然后在此之后进行预测(未显示):
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(8,input_dim=4,activation='relu'))
model.add(Dense(8,input_dim=4,activation='relu'))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
model.fit(x_train,y_train, epochs=150,verbose=0)
所以我知道我想为我的数据复制一组类似的步骤,并且我正在尝试弄清楚如何做到这一点,我无法理解的是我是否必须使用 tf.nn.sigmoid_cross_entropy_with_logits这个问题(因为每个输入都可以属于移动多于一个标签,即可以出现在found_in_1、found_in_2和found_in_3中,这可以产生每个类的概率输出?)
或者我可以只使用像 this 这样的 softmax 函数吗?
【问题讨论】:
标签: python tensorflow machine-learning keras