【问题标题】:Applying machine learning algorithms on Google's Quickdraw dataset在 Google 的 Quickdraw 数据集上应用机器学习算法
【发布时间】:2019-10-13 18:07:27
【问题描述】:

我正在尝试应用 python 的 scikit-learn 包中提供的机器学习算法来从一组涂鸦图像中预测涂鸦名称。

由于我是机器学习的初学者,而且我对神经网络的工作原理一无所知。我想试试 scikit-learn 的算法。

我在名为 quickdraw 的 API 的帮助下下载了(猫和吉他的)涂鸦。

然后我使用以下代码加载图像

import numpy as np
from PIL import Image
import random

#To hold image arrays
images = []

#0-cat, 1-guitar
target = []

#5000 images of cats and guitar each
for i in range(5000):

   #cat images are named like cat0.png, cat1.png ...
   img = Image.open('data/cats/cat'+str(i)+'.png')
   img = np.array(img)
   img = img.flatten()
   images.append(img)
   target.append(0)

   #guitar images are named like guitar0.png, guitar1.png ...
   img = Image.open('data/guitars/guitar'+str(i)+'.png')
   img = np.array(img)
   img = img.flatten()
   images.append(img)
   target.append(1)

random.shuffle(images)
random.shuffle(target)

然后我应用了算法:-

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(images,target,test_size=0.2, random_state=0)

from sklearn.naive_bayes import GaussianNB
GB = GaussianNB()
GB.fit(X_train,y_train)
print(GB.score(X_test,y_test))

运行上述代码后(也使用其他算法,如 SVM、MLP),我的系统只是冻结。我已经强制关闭以返回。我不确定为什么会这样。

我尝试通过更改来减少要加载的图像数量

for i in range(5000):

for i in range(1000):

但我的准确率只有 50% 左右

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    首先,如果我可以这样说:

    由于我是机器学习的初学者,而且我对神经网络的工作原理一无所知。我想试试 scikit-learn 的算法。

    一般来说,这不是学习 ML 的好方法,我强烈建议你至少开始学习基础知识,否则你根本无法知道发生了什么(这不是你可以通过尝试弄清楚的东西它)。

    回到你的问题,将朴素贝叶斯方法应用于原始图像这不是一个好策略:问题在于图像的每个像素都是一个特征,而使用图像你可以获得非常高的数字尺寸很容易(也假设每个像素都独立于它的邻居,这不是你想要的)。 NB 通常用于文档,查看wikipedia 上的这个示例可能会帮助您更多地了解算法。

    简而言之,NB 归结为计算联合条件概率,归结为计算 features 的共现(在维基百科的示例中为 words)是pixels 在您的情况下,这又归结为计算您需要制定 NB 模型的巨大出现矩阵。

    现在,如果您的矩阵由一组文档中的所有 单词 组成,那么这在时间和空间上都会变得非常昂贵 (O(n^2)/2),其中 n是特征的数量;相反,想象一下矩阵由训练集中的所有像素组成,就像您在示例中所做的那样……这会爆炸得非常快。

    这就是为什么将您的数据集切割为 1000 张图像可以让您的 PC 不会耗尽内存。 希望对您有所帮助。

    【讨论】:

    • 谢谢。所以 scikit learn 算法不适合图像数据?或者只是朴素的贝叶斯。
    • 不,我不会说 scikit 工具不适合图像,但其中一些肯定需要某种“预处理”,以便可行;如果你想尝试一下,你应该试试 NB with docs。
    • 如果您觉得这个答案对您的问题有好处,您介意接受吗?
    猜你喜欢
    • 2019-02-26
    • 2021-05-04
    • 2011-08-01
    • 2014-10-29
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2013-06-07
    相关资源
    最近更新 更多