我目前正在探索如何将Dice指标应用于fastai的多类细分问题。我检查了概念,发现Dice确实与F1Score相似。在此之后,我对它们在fastai.metrics中的实现有两个疑问:
namespace App\Tests\Service;
use App\Repository\ProductRepository;
use App\Service\ProductService;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class ProductServiceTest extends KernelTestCase
{
/**
* Create product test
*/
public function testCreateProduct(): void
{
// We load the kernel here (and $container)
self::bootKernel();
$productData = [
'name' => 'foo',
'quantity' => 1,
'sku' => 'bar',
];
$productRepository = static::$container->get('doctrine')->getRepository(ProductRepository::class);
$entityManager = static::$container->get('doctrine')->getManager();
// Here we mock the validator.
$validator = $this->getMockBuilder(ValidatorInterface::class)
->disableOriginalConstructor()
->setMethods(['validate'])
->getMock();
$validator->expects($this->once())
->method('validate')
->willReturn(null);
$productService = new ProductService($productRepository, $entityManager, $validator);
$productFromMethod = $productService->createProduct($productData);
// Here is you assertions:
$this->assertSame($productData['name'], $productFromMethod->getName());
$this->assertSame($productData['quantity'], $productFromMethod->getQuantity());
$this->assertSame($productData['sku'], $productFromMethod->getSku());
$productFromDB = $productRepository->findOneBy(['name' => $productData['name']]);
// Here we test that product in DB and returned product are same
$this->assertSame($productFromDB, $productFromMethod);
}
}
和dice()
的输出有何不同?fbeta(beta=1)
类还可以吗?非常感谢,祝您有美好的一天!
答案 0 :(得分:1)
1)Dice指标通常应等于FBeta(beta = 1)。根据框架的不同,实现可能会略有不同。但是,由于它们本质上非常相似,因此它们可以互换用作您的问题的指标。
2)如果您有多个重叠的蒙版,则可以使用MultiLabelFBeta。也就是说,如果您的细分标签不是互斥的。
例如,狗和猫的像素相互排斥(即,属于猫的像素将永远不属于狗,反之亦然)。但是,如果您同时拥有“ T恤”和“人类”两类,那么您显然重叠了:人们穿着T恤,因此属于T恤的像素很可能属于人类。 / p>
3)注意术语! MultiLabel与MultiClass不同。如果是后者,则标签是互斥的;如果是前者,则不是(T恤+人类示例)。
如果您遇到多类别细分问题,则Dice / FBeta是相关指标。如果您遇到多标签细分问题,那么MultiLabelFbeta是一个很好的指标。