在代码中,我有:
困惑是:
剩余任务:
任何人都可以在这方面提出建议。 对不起,这些长注释!
数据集如下:(这些是新闻标题和正文中每个单词的tfidf)
Unnamed: 0 Unnamed: 0.1 Label Cosine_Similarity c0 c1 c2 c3 c4 c5 ... c9386 c9387 c9388 c9389 c9390 c9391 c9392 c9393 c9394 c9395
0 0 0 Real 0.180319 0.000000 0.0 0.000000 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
1 1 1 Real 0.224159 0.166667 0.0 0.000000 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 2 2 Real 0.233877 0.142857 0.0 0.000000 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
3 3 3 Real 0.155789 0.111111 0.0 0.000000 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
4 4 4 Real 0.225480 0.000000 0.0 0.111111 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
代码和输出为:
df_all = pd.read_csv("C:/Users/shiva/Desktop/allinone200.csv")
dataset=df_all.values
x=dataset[0:,3:]
Y= dataset[0:,2]
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
y = np_utils.to_categorical(encoded_Y)
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=15,shuffle=True)
x_train.shape,y_train.shape
def baseline_model():
model = Sequential()
model.add(Dense(512, activation='relu',input_dim=x_train.shape[1]))
model.add(Dense(64, activation='relu')))
model.add(Dense(2, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
用于拟合模型的代码:
estimator = KerasClassifier(build_fn=baseline_model, epochs=5, batch_size=4, verbose=1)
kf = KFold(n_splits=10, shuffle=True,random_state=15)
for train_index, test_index in kf.split(x_train,y_train):
print("Train Index: ", train_index, "\n")
print("Test Index: ", test_index)
获取结果的代码:
results = cross_val_score(estimator, x_train, y_train, cv=kf)
print results
输出:
[0.9285714 1. 0.9285714 1. 0.78571427 0.85714287
1. 1. 0.9285714 1. ]
平均准确度:`
print("Accuracy: %0.2f (+/-%0.2f)" % (results.mean()*100, results.std()*2))
输出:
Accuracy: 94.29 (+/-0.14)
预测代码:
from sklearn.model_selection import cross_val_predict
y_pred = cross_val_predict(estimator, x_test, y_test,cv=kf)
print(y_test[0])
print(y_pred[0])
输出:处理后
[1. 0.]
0
这里的预测似乎还可以。因为1是REAL,而O是FALSE。 y_test为0,y_predict也为0。
混乱矩阵:
import numpy as np
y_test=np.argmax(y_test, axis=1)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
cm
输出:
array([[32, 0],
[ 1, 27]], dtype=int64)
答案 0 :(得分:0)
根据安德烈亚斯(Andreas)关于观察数的评论,这是否对您有任何帮助:Keras - Plot training, validation and test set accuracy
最佳
答案 1 :(得分:0)
不幸的是,我的评论发表了很久,因此我在这里尝试:
请查看以下内容:https://medium.com/mini-distill/effect-of-batch-size-on-training-dynamics-21c14f7a716e简而言之,较大的批次大小通常会产生较差的结果,但速度更快,在您的情况下,这可能是无关紧要的(200行)。 其次,您没有(可重用的)保留,这可能会给您关于真实准确性的错误假设。初次尝试的准确性超过90%可能意味着:数据过度拟合,泄漏或不平衡(例如,此处:https://www.kdnuggets.com/2017/06/7-techniques-handle-imbalanced-data.html),或者您真的很幸运。 结合小样本的K倍会导致错误的假设: https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0224365
一些经验法则: 1.您希望数据点(行)的数量是要素(列)的2倍。 2.如果您仍然获得良好的结果,这可能意味着很多事情。很有可能是代码或方法上的错误。
想象一下,您必须预测银行的欺诈风险。如果发生欺诈的可能性是1%,我可以简单地说永远不会欺诈,就可以为您建立99%的正确模型。
神经网络非常强大,这是好是坏。糟糕的是,即使没有,他们几乎总是会找到某种模式。如果给它们提供2000列,则如果在逗号后的数字中搜索足够长的时间,则实际上会得到类似于“ Pi”的数字,您会找到想要的任何数字组合。 这里对其进行了更详细的说明: https://medium.com/@jennifer.zzz/more-features-than-data-points-in-linear-regression-5bcabba6883e