RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 721008
Accepted
ilyaplot
ilyaplot
Asked:2020-09-21 01:09:38 +0000 UTC2020-09-21 01:09:38 +0000 UTC 2020-09-21 01:09:38 +0000 UTC

帮助理解 php-ml 使用示例

  • 772

几个小时以来,我试图理解 php-ml 的示例。我不明白这个例子中发生了什么。网络是从格式的 csv 文件中训练的"Текст предложения","язык" 这是示例本身

$dataset = new CsvDataset('data/languages.csv', 1);
$vectorizer = new TokenCountVectorizer(new WordTokenizer());
$tfIdfTransformer = new TfIdfTransformer();
$samples = [];
foreach ($dataset->getSamples() as $sample) {
    $samples[] = $sample[0];
}
$vectorizer->fit($samples);
$vectorizer->transform($samples);
$tfIdfTransformer->fit($samples);
$tfIdfTransformer->transform($samples);
$dataset = new ArrayDataset($samples, $dataset->getTargets());
$randomSplit = new StratifiedRandomSplit($dataset, 0.1);
$classifier = new SVC(Kernel::RBF, 10000);
$classifier->train($randomSplit->getTrainSamples(), $randomSplit->getTrainLabels());
$predictedLabels = $classifier->predict($randomSplit->getTestSamples());
echo 'Accuracy: '.Accuracy::score($randomSplit->getTestLabels(), $predictedLabels);

目前尚不清楚数据在输入端的确切位置。我只知道输入是训练网络的数据。

如何将我的文本提交给输入并确定这句话用英语写成的可能性有多大?

这是示例本身的链接php-ml-examples/classification/languageDetection.php

并到图书馆https://github.com/php-ai/php-ml

php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    hedgehogues
    2020-09-27T17:57:35Z2020-09-27T17:57:35Z

    代码以经典风格编写。

    带有注释的代码(我不知道它们在php中是如何表示的,所以不要生气)。评论中可能存在不准确之处,因为我不了解您正在使用的库。

    # Читаем датку из csv в таблицу объект-признак (судя по коду, в целом, там текстовые данные)
    $dataset = new CsvDataset('data/languages.csv', 1);
    # Создаём объект парсера
    $vectorizer = new TokenCountVectorizer(new WordTokenizer());
    # Создаём Tf-Idf преобразователь
    $tfIdfTransformer = new TfIdfTransformer();
    $samples = [];
    # Запихиваем датку объект за объектом в массив (построчно)
    foreach ($dataset->getSamples() as $sample) {
        $samples[] = $sample[0];
    }
    # Разбиваем дату на токены ("инициализация") и получаем непосредственно разбитые данные (вероятно, на слова)
    $vectorizer->fit($samples);
    $vectorizer->transform($samples);
    # Строим Tf-Idf("инициализация") и получаем непосредственно разбитые данные (вероятно, на слова)
    $tfIdfTransformer->fit($samples);
    $tfIdfTransformer->transform($samples);
    # Преобразуем данные к удобному виду (X, y) == (фичи, класс)
    $dataset = new ArrayDataset($samples, $dataset->getTargets());
    # Делим данные на 2 части: обучающее множество и валидационное
    $randomSplit = new StratifiedRandomSplit($dataset, 0.1);
    # Создаём объект модели с ядром RBF, второй параметр не понимаю зачем нужен
    $classifier = new SVC(Kernel::RBF, 10000);
    # Треним модель на trainSet
    $classifier->train($randomSplit->getTrainSamples(), $randomSplit->getTrainLabels());
    # Делаем оценку и смотрим на результат на тестовом множестве
    $predictedLabels = $classifier->predict($randomSplit->getTestSamples());
    echo 'Accuracy: '.Accuracy::score($randomSplit->getTestLabels(), $predictedLabels);
    

    还有一种感觉就是代码里有一个逻辑炸弹,它就在于数据是tfIdfTransformer和类标签一起传递的。vectorizer此外,我还有一些与 , 相关的设计vectorizer疑问tfIdfTransformer。

    此外,不仅要注意精确度,还要注意召回率。你可以在这里阅读。这个问题与样本可能不平衡的事实有关,即 在第0类中,您有 100,000 条消息,在第1类中,您有 100 条消息。在这种情况下,估计值太高了。此外,对于您的任务,在这个公式中,如果有 2 个类,您可以使用F-measure。有关更多信息,您可以在以下博客之一中查找有关如何评估算法的信息:一、二。当然,在您的情况下,这方面并没有诋毁,因为拆分为 testSet 和 trainSet 是以平衡的方式执行的(这由单词表示Stratified)。但是,如果数据最初是不平衡的,那么基本上什么也做不了。并且有必要同时计算召回和precision。

    我还注意到没有执行CrossValidation,在这方面,模型估计的准确性可能会有很大差异。交叉验证包括重复分成测试集和验证集。在您的情况下,它是随机完成的。那些。:

    • 10% 进入测试数据集,90% 进入训练数据集
    • 模型在测试集上训练
    • 该模型正在评估中
    • 测试数据集以不同的方式分成 10% 到一个测试集,一个泛化 - 90%。
    • ...

    这做了很多次。所有结果均取平均值。由于平均,评估中的错误得到补偿。

    • 4

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5