假设我有一个numpy数组:
data = np.array([[1,1,1],[2,2,2],[3,3,3]])
Run Code Online (Sandbox Code Playgroud)
我有一个相应的"矢量:"
vector = np.array([1,2,3])
Run Code Online (Sandbox Code Playgroud)
如何对data每行进行减法或除法运算,结果如下:
sub_result = [[0,0,0], [0,0,0], [0,0,0]]
div_result = [[1,1,1], [1,1,1], [1,1,1]]
Run Code Online (Sandbox Code Playgroud)
长话短说:如何使用与每行对应的一维标量数组对2D数组的每一行执行操作?
我使用sklearn包中的confusion_matrix()方法为我的分类器计算了一个混淆矩阵.混淆矩阵的对角元素表示预测标签等于真实标签的点的数量,而非对角线元素是由分类器错误标记的元素.
我想将我的混淆矩阵归一化,使其仅包含0到1之间的数字.我想从矩阵中读取正确分类的样本的百分比.
我发现了几种方法如何标准化矩阵(行和列标准化),但我对数学知之甚少,并且不确定这是否是正确的方法.有人可以帮忙吗?
我已经在使用TensorFlow的帮助下实现了Nueral Network模型的分类.但是,我不知道如何通过使用预测分数(准确度)来绘制混淆矩阵.我不是TensorFlow的专家,仍处于学习阶段.在这里,我粘贴了下面的代码,请告诉我如何编写代码以便从以下代码中产生混淆:
# Launch the graph
with tf.Session() as sess:
sess.run(init)
# Set logs writer into folder /tmp/tensorflow_logs
#summary_writer = tf.train.SummaryWriter('/tmp/tensorflow_logs', graph_def=sess.graph_def)
# Training cycle
for epoch in range(training_epochs):
avg_cost = 0.
total_batch = int(X_train.shape[0]/batch_size)
# Loop over total length of batches
for i in range(total_batch):
#picking up random batches from training set of specific size
batch_xs, batch_ys = w2v_utils.nextBatch(X_train, y_train, batch_size)
# Fit training using batch data
sess.run(optimizer, feed_dict={x: batch_xs, y: batch_ys})
# Compute average loss
avg_cost += sess.run(cost, …Run Code Online (Sandbox Code Playgroud) 我需要定义一个生成混淆矩阵的函数。所以我有两个向量y_label和y_predict,它们的元素值为 0、1、2。该函数的目标是创建标签计数:
| 0 | 1 | 2 |
--------------
0 | | | |
--------------
1 | | | |
--------------
2 | | | |
--------------
Run Code Online (Sandbox Code Playgroud)
例如,cm[0,1]对于每个 i ,应该包含 y_label[i] = 0 和 y_predict[i] = 1 的元素计数。
到目前为止,这就是我所做的:
def get_confusion_matrix(y_label, y_fit):
cm = np.ndarray([3,3])
for i in range(3):
for j in range(3):
cm[i, j] = ....
return cm
Run Code Online (Sandbox Code Playgroud)
当然,我可以轻松地进行多级for循环来计数,但是如果 Python / numpy 中有捷径,我想避免这种情况。
我也在考虑制作y_label和y_predict合并成为一个元组数组,然后使用 dict-zip 技术,类似于这里: …