国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
關(guān)鍵要點(diǎn)
什么是機(jī)器學(xué)習(xí)?
監(jiān)督學(xué)習(xí)
無監(jiān)督學(xué)習(xí)
PHP-ML
問題
解決方案
步驟 1:加載數(shù)據(jù)集
步驟 2:準(zhǔn)備數(shù)據(jù)集
步驟 3:生成訓(xùn)練數(shù)據(jù)集
步驟 4:訓(xùn)練分類器
步驟 5:測試分類器的準(zhǔn)確性
結(jié)論
關(guān)于用于推文情感分析的PHP機(jī)器學(xué)習(xí)的常見問題解答 (FAQ)
如何提高情感分析的準(zhǔn)確性?
我是否可以使用PHP以外的其他語言進(jìn)行情感分析?
如何處理情感分析中的諷刺和反語?
如何將情感分析用于其他社交媒體平臺(tái)?
我可以將情感分析用于英語以外的語言嗎?
如何可視化情感分析的結(jié)果?
如何在實(shí)際應(yīng)用中使用情感分析?
如何處理情感分析中的表情符號(hào)?
如何處理情感分析中的拼寫錯(cuò)誤?
如何保持我的情感分析模型最新?
首頁 后端開發(fā) php教程 如何分析PHP機(jī)器學(xué)習(xí)的推文觀點(diǎn)

如何分析PHP機(jī)器學(xué)習(xí)的推文觀點(diǎn)

Feb 09, 2025 am 10:09 AM

How to Analyze Tweet Sentiments with PHP Machine Learning

本文經(jīng)Wern Ancheta同行評(píng)審。感謝所有SitePoint的同行評(píng)審員,使SitePoint的內(nèi)容達(dá)到最佳狀態(tài)!


最近,似乎每個(gè)人都在談?wù)摍C(jī)器學(xué)習(xí)。你的社交媒體信息流充斥著關(guān)于ML、Python、TensorFlow、Spark、Scala、Go等等的帖子;如果你像我一樣,你可能會(huì)想知道,PHP呢?

是的,機(jī)器學(xué)習(xí)和PHP呢?幸運(yùn)的是,有人瘋狂地不僅提出了這個(gè)問題,而且還開發(fā)了一個(gè)通用的機(jī)器學(xué)習(xí)庫,我們可以在下一個(gè)項(xiàng)目中使用它。在這篇文章中,我們將看看PHP-ML——一個(gè)用于PHP的機(jī)器學(xué)習(xí)庫——我們將編寫一個(gè)情感分析類,稍后可以將其重用于我們自己的聊天機(jī)器人或推特機(jī)器人。這篇文章的主要目標(biāo)是:

  • 探索機(jī)器學(xué)習(xí)和情感分析周圍的一般概念
  • 審查PHP-ML的功能和缺點(diǎn)
  • 定義我們將要處理的問題
  • 證明嘗試在PHP中進(jìn)行機(jī)器學(xué)習(xí)并非完全瘋狂的目標(biāo)(可選)

閱讀更好的PHP開發(fā)工具和技術(shù),使你成為更好的開發(fā)者!How to Analyze Tweet Sentiments with PHP Machine Learning 閱讀此書 閱讀此書!How to Analyze Tweet Sentiments with PHP Machine Learning

關(guān)鍵要點(diǎn)

  • PHP-ML是一個(gè)通用的PHP機(jī)器學(xué)習(xí)庫,適用于小型應(yīng)用程序,例如情感分析。
  • 本教程演示了如何使用PHP-ML構(gòu)建一個(gè)專門用于分析推文的情感分析工具,重點(diǎn)介紹監(jiān)督學(xué)習(xí)技術(shù)。
  • 情感分析的關(guān)鍵步驟是準(zhǔn)備數(shù)據(jù),這包括從數(shù)據(jù)集中選擇相關(guān)的特征和標(biāo)簽。
  • 文本數(shù)據(jù)需要特定的預(yù)處理,例如標(biāo)記化和矢量化,才能將推文轉(zhuǎn)換為適合機(jī)器學(xué)習(xí)模型的格式。
  • 例子中使用了樸素貝葉斯分類器,因?yàn)樗唵吻矣行У靥幚矸诸悢?shù)據(jù)。
  • 本文強(qiáng)調(diào)了干凈且相關(guān)的數(shù)據(jù)集對于訓(xùn)練模型以確保準(zhǔn)確的情感分類的重要性。

什么是機(jī)器學(xué)習(xí)?

機(jī)器學(xué)習(xí)是人工智能的一個(gè)子集,它專注于賦予“計(jì)算機(jī)無需明確編程即可學(xué)習(xí)的能力”。這是通過使用可以從特定數(shù)據(jù)集“學(xué)習(xí)”的通用算法來實(shí)現(xiàn)的。

例如,機(jī)器學(xué)習(xí)的一個(gè)常見用途是分類。分類算法用于將數(shù)據(jù)分成不同的組或類別。分類應(yīng)用程序的一些示例包括:

  • 電子郵件垃圾郵件過濾器
  • 市場細(xì)分
  • 欺詐檢測

機(jī)器學(xué)習(xí)是一個(gè)涵蓋許多不同任務(wù)的通用算法的總稱,并且根據(jù)學(xué)習(xí)方式主要分為兩種算法類型——監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)。

監(jiān)督學(xué)習(xí)

在監(jiān)督學(xué)習(xí)中,我們使用標(biāo)記數(shù)據(jù)來訓(xùn)練我們的算法,標(biāo)記數(shù)據(jù)采用輸入對象(向量)和所需輸出值的格式;算法分析訓(xùn)練數(shù)據(jù)并產(chǎn)生所謂的推斷函數(shù),我們可以將其應(yīng)用于新的未標(biāo)記數(shù)據(jù)集。

在本帖的其余部分,我們將重點(diǎn)關(guān)注監(jiān)督學(xué)習(xí),因?yàn)樗菀卓吹胶万?yàn)證關(guān)系;請記住,這兩種算法同樣重要且有趣;有人可能會(huì)認(rèn)為無監(jiān)督學(xué)習(xí)更有用,因?yàn)樗懦藰?biāo)記數(shù)據(jù)的需求。

無監(jiān)督學(xué)習(xí)

另一方面,這種類型的學(xué)習(xí)從一開始就使用未標(biāo)記的數(shù)據(jù)。我們不知道數(shù)據(jù)集的所需輸出值,我們讓算法從數(shù)據(jù)集中得出推論;無監(jiān)督學(xué)習(xí)在進(jìn)行探索性數(shù)據(jù)分析以查找數(shù)據(jù)中的隱藏模式時(shí)特別方便。

PHP-ML

認(rèn)識(shí)PHP-ML,一個(gè)聲稱是PHP機(jī)器學(xué)習(xí)新方法的庫。該庫實(shí)現(xiàn)了算法、神經(jīng)網(wǎng)絡(luò)和工具,用于進(jìn)行數(shù)據(jù)預(yù)處理、交叉驗(yàn)證和特征提取。

我首先承認(rèn),PHP是機(jī)器學(xué)習(xí)的不尋常選擇,因?yàn)樵撜Z言的優(yōu)勢并不太適合機(jī)器學(xué)習(xí)應(yīng)用程序。也就是說,并非每個(gè)機(jī)器學(xué)習(xí)應(yīng)用程序都需要處理PB級(jí)數(shù)據(jù)并進(jìn)行大量計(jì)算——對于簡單的應(yīng)用程序,我們應(yīng)該能夠使用PHP和PHP-ML。

我現(xiàn)在能看到的這個(gè)庫最好的用例是分類器的實(shí)現(xiàn),無論是垃圾郵件過濾器還是情感分析。我們將定義一個(gè)分類問題,并逐步構(gòu)建解決方案,以了解如何在我們的項(xiàng)目中使用PHP-ML。

問題

為了舉例說明實(shí)現(xiàn)PHP-ML并將一些機(jī)器學(xué)習(xí)添加到我們的應(yīng)用程序中的過程,我想找到一個(gè)有趣的問題來解決,還有什么比構(gòu)建一個(gè)推特情感分析類更好的方法來展示分類器呢?

構(gòu)建成功的機(jī)器學(xué)習(xí)項(xiàng)目所需的關(guān)鍵要求之一是良好的起始數(shù)據(jù)集。數(shù)據(jù)集至關(guān)重要,因?yàn)樗鼈儗⒃试S我們針對已分類的示例訓(xùn)練我們的分類器。由于媒體最近圍繞航空公司出現(xiàn)了大量噪音,還有什么比使用客戶對航空公司的推文更好的數(shù)據(jù)集呢?

幸運(yùn)的是,由于Kaggle.io,我們已經(jīng)可以使用推文數(shù)據(jù)集??梢允褂么随溄訌钠渚W(wǎng)站下載Twitter美國航空公司情緒數(shù)據(jù)庫

解決方案

讓我們首先看看我們將要處理的數(shù)據(jù)集。原始數(shù)據(jù)集包含以下列:

  • tweet_id
  • airline_sentiment
  • airline_sentiment_confidence
  • negativereason
  • negativereason_confidence
  • airline
  • airline_sentiment_gold
  • name
  • negativereason_gold
  • retweet_count
  • text
  • tweet_coord
  • tweet_created
  • tweet_location
  • user_timezone

并且看起來像下面的例子(可側(cè)向滾動(dòng)的表格):

tweet_id airline_sentiment airline_sentiment_confidence negativereason negativereason_confidence airline airline_sentiment_gold name negativereason_gold retweet_count text tweet_coord tweet_created tweet_location user_timezone 570306133677760513 neutral 1.0 Virgin America cairdin 0 @VirginAmerica What @dhepburn said. 2015-02-24 11:35:52 -0800 Eastern Time (US & Canada) 570301130888122368 positive 0.3486 0.0 Virgin America jnardino 0 @VirginAmerica plus you’ve added commercials to the experience… tacky. 2015-02-24 11:15:59 -0800 Pacific Time (US & Canada) 570301083672813571 neutral 0.6837 Virgin America yvonnalynn 0 @VirginAmerica I didn’t today… Must mean I need to take another trip! 2015-02-24 11:15:48 -0800 Lets Play Central Time (US & Canada) 570301031407624196 negative 1.0 Bad Flight 0.7033 Virgin America jnardino 0 “@VirginAmerica it’s really aggressive to blast obnoxious “”entertainment”” in your guests’ faces & they have little recourse” 2015-02-24 11:15:36 -0800 Pacific Time (US & Canada) 570300817074462722 negative 1.0 Can’t Tell 1.0 Virgin America jnardino 0 @VirginAmerica and it’s a really big bad thing about it 2015-02-24 11:14:45 -0800 Pacific Time (US & Canada) 570300767074181121 negative 1.0 Can’t Tell 0.6842 Virgin America jnardino 0 “@VirginAmerica seriously would pay $30 a flight for seats that didn’t have this playing. it’s really the only bad thing about flying VA” 2015-02-24 11:14:33 -0800 Pacific Time (US & Canada) 570300616901320704 positive 0.6745 0.0 Virgin America cjmcginnis 0 “@VirginAmerica yes nearly every time I fly VX this “ear worm” won’t go away :)” 2015-02-24 11:13:57 -0800 San Francisco CA Pacific Time (US & Canada) 570300248553349120 neutral 0.634 Virgin America pilot 0 “@VirginAmerica Really missed a prime opportunity for Men Without Hats parody there. http://www.miracleart.cn/link/76379ed89eafe43c8f6bd64fd09e3852” 2015-02-24 11:12:29 -0800 Los Angeles Pacific Time (US & Canada) 該文件包含14,640條推文,因此對于我們來說是一個(gè)不錯(cuò)的工作數(shù)據(jù)集?,F(xiàn)在,使用我們當(dāng)前可用的列數(shù),我們擁有比示例所需更多的數(shù)據(jù);出于實(shí)際目的,我們只關(guān)心以下列:

  • text
  • airline_sentiment

其中text將成為我們的特征,airline_sentiment將成為我們的目標(biāo)。其余列可以丟棄,因?yàn)樗鼈儾粫?huì)用于我們的練習(xí)。讓我們從創(chuàng)建項(xiàng)目開始,并使用以下文件初始化composer:

<code>{
    "name": "amacgregor/phpml-exercise",
    "description": "Example implementation of a Tweet sentiment analysis with PHP-ML",
    "type": "project",
    "require": {
        "php-ai/php-ml": "^0.4.1"
    },
    "license": "Apache License 2.0",
    "authors": [
        {
            "name": "Allan MacGregor",
            "email": "amacgregor@allanmacgregor.com"
        }
    ],
    "autoload": {
        "psr-4": {"PhpmlExercise\": "src/"}
    },
    "minimum-stability": "dev"
}</code>
<code>composer install
</code>

如果您需要 Composer 入門介紹,請參見此處。

為了確保我們正確設(shè)置,讓我們創(chuàng)建一個(gè)快速腳本,它將加載我們的Tweets.csv數(shù)據(jù)文件并確保它具有我們需要的數(shù)據(jù)。將以下代碼復(fù)制為項(xiàng)目根目錄中的reviewDataset.php:

<?php namespace PhpmlExercise;

require __DIR__ . '/vendor/autoload.php';

use Phpml\Dataset\CsvDataset;

$dataset = new CsvDataset('datasets/raw/Tweets.csv',1);

foreach ($dataset->getSamples() as $sample) {
    print_r($sample);
}

現(xiàn)在,使用php reviewDataset.php運(yùn)行腳本,讓我們查看輸出:

<code>Array( [0] => 569587371693355008 )
Array( [0] => 569587242672398336 )
Array( [0] => 569587188687634433 )
Array( [0] => 569587140490866689 )
</code>

現(xiàn)在這看起來沒用,不是嗎?讓我們看看CsvDataset類,以便更好地了解內(nèi)部發(fā)生的情況:

<?php 
    public function __construct(string $filepath, int $features, bool $headingRow = true)
    {
        if (!file_exists($filepath)) {
            throw FileException::missingFile(basename($filepath));
        }

        if (false === $handle = fopen($filepath, 'rb')) {
            throw FileException::cantOpenFile(basename($filepath));
        }

        if ($headingRow) {
            $data = fgetcsv($handle, 1000, ',');
            $this->columnNames = array_slice($data, 0, $features);
        } else {
            $this->columnNames = range(0, $features - 1);
        }

        while (($data = fgetcsv($handle, 1000, ',')) !== false) {
            $this->samples[] = array_slice($data, 0, $features);
            $this->targets[] = $data[$features];
        }
        fclose($handle);
    }

CsvDataset構(gòu)造函數(shù)采用3個(gè)參數(shù):

  • 源CSV的文件路徑
  • 指定文件中特征數(shù)量的整數(shù)
  • 布爾值,指示第一行是否為標(biāo)題

如果我們仔細(xì)觀察,我們可以看到該類正在將CSV文件映射到兩個(gè)內(nèi)部數(shù)組:samples和targets。Samples包含文件提供的所有特征,而targets包含已知值(負(fù)、正或中性)。

基于上述內(nèi)容,我們可以看到我們的CSV文件需要遵循的格式如下:

<code>| feature_1 | feature_2 | feature_n | target | </code>

我們將需要生成一個(gè)干凈的數(shù)據(jù)集,其中只包含我們需要繼續(xù)工作的列。讓我們將此腳本稱為generateCleanDataset.php:

<?php namespace PhpmlExercise;

require __DIR__ . '/vendor/autoload.php';

use Phpml\Exception\FileException;

$sourceFilepath         = __DIR__ . '/datasets/raw/Tweets.csv';
$destinationFilepath    = __DIR__ . '/datasets/clean_tweets.csv';

$rows =[];

$rows = getRows($sourceFilepath, $rows);
writeRows($destinationFilepath, $rows);


/**
 * @param $filepath
 * @param $rows
 * @return array
 */
function getRows($filepath, $rows)
{
    $handle = checkFilePermissions($filepath);

    while (($data = fgetcsv($handle, 1000, ',')) !== false) {
        $rows[] = [$data[10], $data[1]];
    }
    fclose($handle);
    return $rows;
}

/**
 * @param $filepath
 * @param string $mode
 * @return bool|resource
 * @throws FileException
 */
function checkFilePermissions($filepath, $mode = 'rb')
{
    if (!file_exists($filepath)) {
        throw FileException::missingFile(basename($filepath));
    }

    if (false === $handle = fopen($filepath, $mode)) {
        throw FileException::cantOpenFile(basename($filepath));
    }
    return $handle;
}

/**
 * @param $filepath
 * @param $rows
 * @internal param $list
 */
function writeRows($filepath, $rows)
{
    $handle = checkFilePermissions($filepath, 'wb');

    foreach ($rows as $row) {
        fputcsv($handle, $row);
    }

    fclose($handle);
}

沒有什么太復(fù)雜的,只是足以完成這項(xiàng)工作。讓我們用php generateCleanDataset.php執(zhí)行它。

現(xiàn)在,讓我們將reviewDataset.php腳本指向干凈的數(shù)據(jù)集:

<code>Array
(
    [0] => @AmericanAir That will be the third time I have been called by 800-433-7300 an hung on before anyone speaks. What do I do now???
)
Array
(
    [0] => @AmericanAir How clueless is AA. Been waiting to hear for 2.5 weeks about a refund from a Cancelled Flightled flight & been on hold now for 1hr 49min
)</code>

BAM!這是我們可以使用的數(shù)據(jù)!到目前為止,我們一直在創(chuàng)建用于操作數(shù)據(jù)的簡單腳本。接下來,我們將開始在src/classification/SentimentAnalysis.php下創(chuàng)建一個(gè)新類。

<?php namespace PhpmlExercise\Classification;

/**
 * Class SentimentAnalysis
 * @package PhpmlExercise\Classification
 */
class SentimentAnalysis { 
    public function train() {}
    public function predict() {}
}

我們的情感類將需要在我們的情感分析類中使用兩個(gè)函數(shù):

  • 一個(gè)訓(xùn)練函數(shù),它將采用我們的數(shù)據(jù)集訓(xùn)練樣本和標(biāo)簽以及一些可選參數(shù)。
  • 一個(gè)預(yù)測函數(shù),它將采用未標(biāo)記的數(shù)據(jù)集并根據(jù)訓(xùn)練數(shù)據(jù)分配一組標(biāo)簽。

在項(xiàng)目的根目錄中創(chuàng)建一個(gè)名為classifyTweets.php的腳本。我們將使用此腳本來實(shí)例化和測試我們的情感分析類。這是我們將使用的模板:

<?php 
namespace PhpmlExercise;
use PhpmlExercise\Classification\SentimentAnalysis;

require __DIR__ . '/vendor/autoload.php';

// 步驟 1:加載數(shù)據(jù)集

// 步驟 2:準(zhǔn)備數(shù)據(jù)集

// 步驟 3:生成訓(xùn)練/測試數(shù)據(jù)集

// 步驟 4:訓(xùn)練分類器

// 步驟 5:測試分類器的準(zhǔn)確性

步驟 1:加載數(shù)據(jù)集

我們已經(jīng)擁有可以用于將CSV加載到我們早期示例中的數(shù)據(jù)集對象的代碼。我們將使用相同的代碼并進(jìn)行一些調(diào)整:

<?php ...
use Phpml\Dataset\CsvDataset;
...
$dataset = new CsvDataset('datasets/clean_tweets.csv',1);

$samples = [];
foreach ($dataset->getSamples() as $sample) {
    $samples[] = $sample[0];
}

這將生成一個(gè)僅包含特征(在本例中為推文文本)的扁平數(shù)組,我們將使用它來訓(xùn)練我們的分類器。

步驟 2:準(zhǔn)備數(shù)據(jù)集

現(xiàn)在,擁有原始文本并將該文本傳遞給分類器將不會(huì)有用或準(zhǔn)確,因?yàn)槊織l推文本質(zhì)上都是不同的。幸運(yùn)的是,在嘗試應(yīng)用分類或機(jī)器學(xué)習(xí)算法時(shí),有一些方法可以處理文本。對于此示例,我們將使用以下兩個(gè)類:

  • 令牌計(jì)數(shù)向量化器:這會(huì)將文本樣本集合轉(zhuǎn)換為令牌計(jì)數(shù)向量。本質(zhì)上,我們推文中的每個(gè)詞都成為一個(gè)唯一的數(shù)字,并跟蹤特定文本樣本中某個(gè)詞出現(xiàn)的次數(shù)。
  • Tf-idf轉(zhuǎn)換器:term frequency–inverse document frequency的縮寫,是一種數(shù)值統(tǒng)計(jì)量,旨在反映某個(gè)詞對集合或語料庫中文檔的重要性。

讓我們從文本向量化器開始:

<code>{
    "name": "amacgregor/phpml-exercise",
    "description": "Example implementation of a Tweet sentiment analysis with PHP-ML",
    "type": "project",
    "require": {
        "php-ai/php-ml": "^0.4.1"
    },
    "license": "Apache License 2.0",
    "authors": [
        {
            "name": "Allan MacGregor",
            "email": "amacgregor@allanmacgregor.com"
        }
    ],
    "autoload": {
        "psr-4": {"PhpmlExercise\": "src/"}
    },
    "minimum-stability": "dev"
}</code>

接下來,應(yīng)用Tf-idf轉(zhuǎn)換器:

<code>composer install
</code>

我們的samples數(shù)組現(xiàn)在采用了一種格式,可以很容易地被我們的分類器理解。我們還沒完成,我們需要用其相應(yīng)的情緒標(biāo)記每個(gè)樣本。

步驟 3:生成訓(xùn)練數(shù)據(jù)集

幸運(yùn)的是,PHP-ML已經(jīng)涵蓋了這個(gè)需求,代碼非常簡單:

<?php namespace PhpmlExercise;

require __DIR__ . '/vendor/autoload.php';

use Phpml\Dataset\CsvDataset;

$dataset = new CsvDataset('datasets/raw/Tweets.csv',1);

foreach ($dataset->getSamples() as $sample) {
    print_r($sample);
}

我們可以繼續(xù)使用此數(shù)據(jù)集并訓(xùn)練我們的分類器。但是,我們?nèi)鄙儆米黩?yàn)證的測試數(shù)據(jù)集,因此我們將“作弊”一點(diǎn),并將我們的原始數(shù)據(jù)集分成兩部分:一個(gè)訓(xùn)練數(shù)據(jù)集和一個(gè)用于測試模型準(zhǔn)確性的更小得多的數(shù)據(jù)集。

<code>Array( [0] => 569587371693355008 )
Array( [0] => 569587242672398336 )
Array( [0] => 569587188687634433 )
Array( [0] => 569587140490866689 )
</code>

這種方法稱為交叉驗(yàn)證。該術(shù)語來自統(tǒng)計(jì)學(xué),可以定義如下:

交叉驗(yàn)證,有時(shí)稱為旋轉(zhuǎn)估計(jì),是一種模型驗(yàn)證技術(shù),用于評(píng)估統(tǒng)計(jì)分析的結(jié)果將如何推廣到獨(dú)立數(shù)據(jù)集。它主要用于預(yù)測的目標(biāo)設(shè)置,并且想要估計(jì)預(yù)測模型在實(shí)踐中的準(zhǔn)確性?!?Wikipedia.com

步驟 4:訓(xùn)練分類器

最后,我們準(zhǔn)備返回并實(shí)現(xiàn)SentimentAnalysis類。如果你現(xiàn)在還沒注意到,機(jī)器學(xué)習(xí)的很大一部分是關(guān)于收集和操作數(shù)據(jù);機(jī)器學(xué)習(xí)模型的實(shí)際實(shí)現(xiàn)往往涉及較少的內(nèi)容。

為了實(shí)現(xiàn)我們的情感分析類,我們有三種可用的分類算法:

  • 支持向量分類
  • K最近鄰
  • 樸素貝葉斯

對于此練習(xí),我們將使用最簡單的一種,即樸素貝葉斯分類器,因此讓我們繼續(xù)更新我們的類以實(shí)現(xiàn)train方法:

<?php 
    public function __construct(string $filepath, int $features, bool $headingRow = true)
    {
        if (!file_exists($filepath)) {
            throw FileException::missingFile(basename($filepath));
        }

        if (false === $handle = fopen($filepath, 'rb')) {
            throw FileException::cantOpenFile(basename($filepath));
        }

        if ($headingRow) {
            $data = fgetcsv($handle, 1000, ',');
            $this->columnNames = array_slice($data, 0, $features);
        } else {
            $this->columnNames = range(0, $features - 1);
        }

        while (($data = fgetcsv($handle, 1000, ',')) !== false) {
            $this->samples[] = array_slice($data, 0, $features);
            $this->targets[] = $data[$features];
        }
        fclose($handle);
    }

如你所見,我們讓PHP-ML為我們完成所有繁重的工作。我們只是為我們的項(xiàng)目創(chuàng)建了一個(gè)很好的抽象。但是我們?nèi)绾沃牢覀兊姆诸惼魇欠裾娴脑谟?xùn)練和工作呢?是時(shí)候使用我們的testSamples和testLabels了。

步驟 5:測試分類器的準(zhǔn)確性

在我們繼續(xù)測試我們的分類器之前,我們確實(shí)必須實(shí)現(xiàn)預(yù)測方法:

<code>{
    "name": "amacgregor/phpml-exercise",
    "description": "Example implementation of a Tweet sentiment analysis with PHP-ML",
    "type": "project",
    "require": {
        "php-ai/php-ml": "^0.4.1"
    },
    "license": "Apache License 2.0",
    "authors": [
        {
            "name": "Allan MacGregor",
            "email": "amacgregor@allanmacgregor.com"
        }
    ],
    "autoload": {
        "psr-4": {"PhpmlExercise\": "src/"}
    },
    "minimum-stability": "dev"
}</code>

同樣,PHP-ML為我們提供了幫助,并為我們完成了所有繁重的工作。讓我們相應(yīng)地更新classifyTweets類:

<code>composer install
</code>

最后,我們需要一種方法來測試我們訓(xùn)練模型的準(zhǔn)確性;謝天謝地,PHP-ML也涵蓋了這一點(diǎn),并且他們有幾個(gè)指標(biāo)類。在我們的例子中,我們對模型的準(zhǔn)確性感興趣。讓我們看看代碼:

<?php namespace PhpmlExercise;

require __DIR__ . '/vendor/autoload.php';

use Phpml\Dataset\CsvDataset;

$dataset = new CsvDataset('datasets/raw/Tweets.csv',1);

foreach ($dataset->getSamples() as $sample) {
    print_r($sample);
}

我們應(yīng)該看到類似以下內(nèi)容:

<code>Array( [0] => 569587371693355008 )
Array( [0] => 569587242672398336 )
Array( [0] => 569587188687634433 )
Array( [0] => 569587140490866689 )
</code>

結(jié)論

這篇文章有點(diǎn)長,所以讓我們回顧一下到目前為止我們學(xué)到了什么:

  • 從一開始就擁有良好的數(shù)據(jù)集對于實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法至關(guān)重要。
  • 監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)的區(qū)別。
  • 交叉驗(yàn)證在機(jī)器學(xué)習(xí)中的含義和用途。
  • 向量化和轉(zhuǎn)換對于準(zhǔn)備用于機(jī)器學(xué)習(xí)的文本數(shù)據(jù)集至關(guān)重要。
  • 如何通過使用PHP-ML的樸素貝葉斯分類器來實(shí)現(xiàn)Twitter情感分析。

這篇文章也作為PHP-ML庫的介紹,并希望讓你對該庫的功能以及如何在自己的項(xiàng)目中嵌入它有一個(gè)很好的了解。

最后,這篇文章絕非全面,還有很多需要學(xué)習(xí)、改進(jìn)和實(shí)驗(yàn)的地方;以下是一些想法,可以幫助你進(jìn)一步改進(jìn):

  • 將樸素貝葉斯算法替換為支持向量機(jī)算法。
  • 如果你嘗試針對完整數(shù)據(jù)集(14,000行)運(yùn)行,你可能會(huì)注意到該過程的內(nèi)存密集程度。嘗試實(shí)現(xiàn)模型持久性,以便不必在每次運(yùn)行時(shí)都進(jìn)行訓(xùn)練。
  • 將數(shù)據(jù)集生成移動(dòng)到它自己的輔助類中。

我希望你發(fā)現(xiàn)這篇文章有用。如果你有一些關(guān)于PHP-ML的應(yīng)用程序想法或任何問題,請隨時(shí)在下面的評(píng)論區(qū)中提出!

關(guān)于用于推文情感分析的PHP機(jī)器學(xué)習(xí)的常見問題解答 (FAQ)

如何提高情感分析的準(zhǔn)確性?

提高情感分析的準(zhǔn)確性涉及多種策略。首先,確保你的訓(xùn)練數(shù)據(jù)盡可能干凈和相關(guān)。這意味著刪除任何不相關(guān)的數(shù)據(jù),例如停用詞、標(biāo)點(diǎn)符號(hào)和URL。其次,考慮使用更復(fù)雜的算法。雖然樸素貝葉斯分類器是一個(gè)很好的起點(diǎn),但其他算法(如支持向量機(jī) (SVM) 或深度學(xué)習(xí)模型)可能會(huì)提供更好的結(jié)果。最后,考慮使用更大的數(shù)據(jù)集進(jìn)行訓(xùn)練。你的模型可以學(xué)習(xí)的數(shù)據(jù)越多,它就越準(zhǔn)確。

我是否可以使用PHP以外的其他語言進(jìn)行情感分析?

是的,你可以使用其他編程語言進(jìn)行情感分析。例如,Python 因其廣泛的機(jī)器學(xué)習(xí)庫(如NLTK、TextBlob和scikit-learn)而成為一種流行的選擇。但是,PHP也可以有效地用于情感分析,特別是如果你已經(jīng)熟悉該語言或你的項(xiàng)目是基于PHP框架構(gòu)建的。

如何處理情感分析中的諷刺和反語?

處理情感分析中的諷刺和反語是一項(xiàng)具有挑戰(zhàn)性的任務(wù)。這些語言特征通常涉及說某事但意味著相反的意思,這對于機(jī)器學(xué)習(xí)模型來說很難理解。一種方法是使用可以理解上下文的更復(fù)雜的模型,例如深度學(xué)習(xí)模型。另一種方法是使用專門的諷刺檢測模型,該模型可以使用諷刺評(píng)論的數(shù)據(jù)集進(jìn)行訓(xùn)練。

如何將情感分析用于其他社交媒體平臺(tái)?

情感分析的原理可以應(yīng)用于任何文本數(shù)據(jù),包括來自其他社交媒體平臺(tái)的帖子。主要區(qū)別在于你如何收集數(shù)據(jù)。每個(gè)社交媒體平臺(tái)都有自己的API用于訪問用戶帖子,因此你需要熟悉你感興趣的平臺(tái)的API。

我可以將情感分析用于英語以外的語言嗎?

是的,情感分析可以用于任何語言。但是,分析的有效性將取決于你的訓(xùn)練數(shù)據(jù)的質(zhì)量。如果你使用的是英語以外的語言,則需要使用該語言的數(shù)據(jù)集來訓(xùn)練你的模型。一些機(jī)器學(xué)習(xí)庫也直接支持多種語言。

如何可視化情感分析的結(jié)果?

有很多方法可以可視化情感分析結(jié)果。一種常見的方法是使用條形圖來顯示正面、負(fù)面和中性推文的數(shù)量。另一種方法是使用詞云來可視化數(shù)據(jù)中最常用的詞。PHP有幾個(gè)用于創(chuàng)建這些可視化的庫,例如pChart和GD。

如何在實(shí)際應(yīng)用中使用情感分析?

情感分析有很多實(shí)際應(yīng)用。企業(yè)可以使用它來監(jiān)控客戶對其產(chǎn)品或服務(wù)的意見,政治家可以使用它來衡量公眾對政策問題的意見,研究人員可以使用它來研究社會(huì)趨勢。可能性是無限的。

如何處理情感分析中的表情符號(hào)?

表情符號(hào)可以攜帶重要的情感信息,因此將它們包含在你的分析中很重要。一種方法是在將數(shù)據(jù)輸入模型之前,將每個(gè)表情符號(hào)替換為其文本描述。有一些庫可以幫助你做到這一點(diǎn),例如PHP的Emojione。

如何處理情感分析中的拼寫錯(cuò)誤?

拼寫錯(cuò)誤在情感分析中可能是一個(gè)挑戰(zhàn)。一種方法是在將數(shù)據(jù)輸入模型之前使用拼寫檢查器來更正錯(cuò)誤。另一種方法是使用可以處理拼寫錯(cuò)誤的模型,例如深度學(xué)習(xí)模型。

如何保持我的情感分析模型最新?

保持你的情感分析模型最新涉及定期使用新數(shù)據(jù)對其進(jìn)行再訓(xùn)練。這確保你的模型與語言使用和情感的變化保持同步。你可以通過設(shè)置一個(gè)重新訓(xùn)練模型的計(jì)劃來自動(dòng)化此過程。

以上是如何分析PHP機(jī)器學(xué)習(xí)的推文觀點(diǎn)的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

如何在PHP中實(shí)施身份驗(yàn)證和授權(quán)? 如何在PHP中實(shí)施身份驗(yàn)證和授權(quán)? Jun 20, 2025 am 01:03 AM

tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

如何在PHP中安全地處理文件上傳? 如何在PHP中安全地處理文件上傳? Jun 19, 2025 am 01:05 AM

要安全處理PHP中的文件上傳,核心在于驗(yàn)證文件類型、重命名文件并限制權(quán)限。1.使用finfo_file()檢查真實(shí)MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機(jī)文件名,存儲(chǔ)至非Web根目錄;3.通過php.ini和HTML表單限制文件大小,設(shè)置目錄權(quán)限為0755;4.使用ClamAV掃描惡意軟件,增強(qiáng)安全性。這些步驟有效防止安全漏洞,確保文件上傳過程安全可靠。

PHP中==(松散比較)和===(嚴(yán)格的比較)之間有什么區(qū)別? PHP中==(松散比較)和===(嚴(yán)格的比較)之間有什么區(qū)別? Jun 19, 2025 am 01:07 AM

在PHP中,==與===的主要區(qū)別在于類型檢查的嚴(yán)格程度。==在比較前會(huì)進(jìn)行類型轉(zhuǎn)換,例如5=="5"返回true,而===要求值和類型都相同才會(huì)返回true,例如5==="5"返回false。使用場景上,===更安全應(yīng)優(yōu)先使用,==僅在需要類型轉(zhuǎn)換時(shí)使用。

如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進(jìn)行交互? 如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進(jìn)行交互? Jun 19, 2025 am 01:07 AM

是的,PHP可以通過特定擴(kuò)展或庫與MongoDB和Redis等NoSQL數(shù)據(jù)庫交互。首先,使用MongoDBPHP驅(qū)動(dòng)(通過PECL或Composer安裝)創(chuàng)建客戶端實(shí)例并操作數(shù)據(jù)庫及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫或phpredis擴(kuò)展連接Redis,執(zhí)行鍵值設(shè)置與獲取,推薦phpredis用于高性能場景,Predis則便于快速部署;兩者均適用于生產(chǎn)環(huán)境且文檔完善。

如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? 如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? Jun 19, 2025 pm 05:13 PM

PHP中使用基本數(shù)學(xué)運(yùn)算的方法如下:1.加法用 號(hào),支持整數(shù)和浮點(diǎn)數(shù),也可用于變量,字符串?dāng)?shù)字會(huì)自動(dòng)轉(zhuǎn)換但不推薦依賴;2.減法用-號(hào),變量同理,類型轉(zhuǎn)換同樣適用;3.乘法用*號(hào),適用于數(shù)字及類似字符串;4.除法用/號(hào),需避免除以零,并注意結(jié)果可能是浮點(diǎn)數(shù);5.取模用%號(hào),可用于判斷奇偶數(shù),處理負(fù)數(shù)時(shí)余數(shù)符號(hào)與被除數(shù)一致。正確使用這些運(yùn)算符的關(guān)鍵在于確保數(shù)據(jù)類型清晰并處理好邊界情況。

我如何了解最新的PHP開發(fā)和最佳實(shí)踐? 我如何了解最新的PHP開發(fā)和最佳實(shí)踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什么是PHP,為什么它用于Web開發(fā)? 什么是PHP,為什么它用于Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設(shè)置PHP時(shí)區(qū)? 如何設(shè)置PHP時(shí)區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

See all articles