python - 矢量化 scipy norm.pdf
问题描述
def predictDigit(img):
prob = [0] * 10
for digit in range(10):
for pix in range(len(img)):
std = pix_std[digit][pix]
mean = pix_means[digit][pix]
if std == 0:
continue
else:
prob[digit] += np.log(norm.pdf(img[pix], mean, std))
prob[digit] += np.log(digit_prob[digit])
return np.argmax(prob)
我编写了这个函数来使用它来实现一个用于数字分类的朴素贝叶斯分类器。这个想法是遍历输入图像的所有像素并将其添加np.log(norm.pdf(img[pix], mean, std))
到最后prob
并返回它的 argmax 以标记输入图像的数字。
但是,这需要的时间太长。我使用以下方法成功矢量化了均值和标准:
pix_means[digit] = np.mean(image_cluster[digit], axis = 0)
pix_std[digit] = np.std(image_cluster[digit], axis = 0)
但是,我不确定是否可以使用norm.pdf
.
请帮忙。
编辑
数字概率
digit_count = {}
for digit in y_train:
if digit not in digit_count:
digit_count[digit] = 1
else:
digit_count[digit] += 1
digit_prob = {}
for digit in range(10):
digit_prob[digit] = digit_count[digit] / len(y_train)
image_cluster
image_cluster = {}
for image, digit in zip(x_train, y_train):
if digit not in image_cluster:
image_cluster[digit] = [image]
else:
image_cluster[digit].append(image)
pix_means = {}
pix_std = {}
# get mean and sd
for digit in range(10):
pix_means[digit] = np.mean(image_cluster[digit], axis = 0)
pix_std[digit] = np.std(image_cluster[digit], axis = 0)
解决方案
norm.pdf 开箱即用矢量化!
要计算多个点的 cdf,我们可以传递一个列表或一个 numpy 数组。
norm.cdf([-1., 0, 1]) array([ 0.15865525, 0.5, 0.84134475]) import numpy as np norm.cdf(np.array([-1., 0, 1]))
array([ 0.15865525, 0.5, 0.84134475])
因此,基本的方法,如pdf、cdf等,都被向量化了。
https://docs.scipy.org/doc/scipy/reference/tutorial/stats.html
推荐阅读
- java - 从 JSON API 响应中获取所有元素
- html - 如何使每个字符的宽度相同?
- purescript - What does the pipe character (|) mean when part of a purescript type signature?
- typescript - How to chain the result of observable to the below observable in rxjs
- ruby-on-rails - Query the last instance with condition in Rails
- javascript - 如何为 HTML 表格和列指定特定宽度
- node.js - 无法构建项目获取命令 "C:\Users\UserName\AppData\Roaming\npm\grunt install --target=dev" exited with code 1
- sql - PSQL 按顺序选择 a 或 b,但如果 a 和 b 都存在,则不要同时选择 a 和 b
- coq - even_Sn_not_even_n - 将 1 个假设应用于另一个
- rest - swagger 规范文件保存在哪里?