>백엔드 개발 >PHP 튜토리얼 >PHP와 머신러닝: 이상 탐지 및 이상치 처리 방법

PHP와 머신러닝: 이상 탐지 및 이상치 처리 방법

王林
王林원래의
2023-07-31 16:09:101096검색

PHP 및 기계 학습: 이상 탐지 및 이상값 처리 수행 방법

개요:
실제 데이터 처리에서는 데이터 세트에서 이상값이 자주 발생합니다. 이상값은 측정 오류, 예측할 수 없는 이벤트, 데이터 원본 문제 등 다양한 이유로 발생할 수 있습니다. 이러한 이상값은 데이터 분석, 모델 교육, 예측과 같은 작업에 부정적인 영향을 미칠 수 있습니다. 이 기사에서는 이상 탐지 및 이상값 처리를 위해 PHP 및 기계 학습 기술을 사용하는 방법을 소개합니다.

  1. 이상 탐지 방법:
    이상치를 탐지하기 위해 다양한 기계 학습 알고리즘을 사용할 수 있습니다. 다음은 일반적으로 사용되는 두 가지 이상 징후 탐지 방법입니다.

1.1 Z-Score 방법:
Z-Score 방법은 통계 기반 이상 탐지 방법으로, 각 데이터 포인트의 평균값에서 편차 값을 계산하여 결정합니다. 데이터 세트 이상치입니까? 구체적인 단계는 다음과 같습니다.

  1. 데이터 세트의 평균 및 표준 편차를 계산합니다.
  2. 각 데이터 포인트에 대해 평균과의 편차를 계산합니다. 편차 = (데이터 - 평균) / std.
  3. 주어진 임계값(보통 3)에 대해 임계값보다 큰 편차 값이 있는 데이터 포인트를 이상값으로 표시합니다.

샘플 코드는 다음과 같습니다.

function zscore($data, $threshold){
    $mean = array_sum($data) / count($data);
    $std = sqrt(array_sum(array_map(function($x) use ($mean) { return pow($x - $mean, 2); }, $data)) / count($data));
    $result = [];
    foreach ($data as $value) {
        $deviation = ($value - $mean) / $std;
        if (abs($deviation) > $threshold) {
            $result[] = $value;
        }
    }
    return $result;
}

$data = [1, 2, 3, 4, 5, 100];
$threshold = 3;
$result = zscore($data, $threshold);

echo "异常值检测结果:" . implode(", ", $result);

1.2 Isolation Forest:
Isolation Forest는 무작위로 분할된 이진 트리를 구축하여 데이터 포인트의 이상 여부를 판단하는 집합 트리 기반의 이상 탐지 방법입니다. 구체적인 단계는 다음과 같습니다.

  1. 특징을 무작위로 선택하고 특징의 최소값과 최대값 사이의 무작위 구분점을 선택합니다.
  2. 분할 기능과 분할 지점을 무작위로 선택하고 데이터 지점을 두 개의 하위 집합으로 분할합니다. 각 하위 집합에 하나의 데이터 지점만 포함되거나 트리의 최대 깊이에 도달할 때까지 반복합니다.
  3. 트리의 경로 길이를 기준으로 데이터 포인트의 비정상 정도를 계산합니다. 경로 길이가 짧을수록 비정상이 더 높습니다.

샘플 코드는 다음과 같습니다.

require_once('anomaly_detection.php');

$data = [1, 2, 3, 4, 5, 100];
$contamination = 0.1;
$forest = new IsolationForest($contamination);
$forest->fit($data);
$result = $forest->predict($data);

echo "异常值检测结果:" . implode(", ", $result);
  1. 아웃라이어 처리 방법:
    아웃라이어가 감지되면 이를 처리해야 합니다. 다음은 일반적으로 사용되는 두 가지 이상값 처리 방법입니다.

2.1 이상값 삭제:
간단한 처리 방법은 이상값을 직접 삭제하는 것입니다. 이상 탐지 결과에 따라 데이터 세트에서 임계값을 초과하는 데이터 포인트를 제거할 수 있습니다.

샘플 코드는 다음과 같습니다.

function removeOutliers($data, $threshold){
    $result = [];
    foreach ($data as $value) {
        if (abs($value) <= $threshold) {
            $result[] = $value;
        }
    }
    return $result;
}

$data = [1, 2, 3, 4, 5, 100];
$threshold = 3;
$result = removeOutliers($data, $threshold);

echo "异常值处理结果:" . implode(", ", $result);

2.2 이상값 대체:
또 다른 접근 방식은 이상값을 평균 또는 중앙값과 같은 합리적인 값으로 대체하는 것입니다. 이러한 방식으로 데이터 세트의 전반적인 분포 특성을 보존할 수 있습니다.

샘플 코드는 다음과 같습니다.

function replaceOutliers($data, $threshold, $replacement){
    $result = [];
    foreach ($data as $value) {
        if (abs($value) > $threshold) {
            $result[] = $replacement;
        } else {
            $result[] = $value;
        }
    }
    return $result;
}

$data = [1, 2, 3, 4, 5, 100];
$threshold = 3;
$replacement = 0;
$result = replaceOutliers($data, $threshold, $replacement);

echo "异常值处理结果:" . implode(", ", $result);

결론:
이 글에서는 PHP와 머신러닝 기법을 활용한 이상치 탐지 및 이상값 처리 방법을 소개했습니다. Z-Score 방법과 격리 포리스트 알고리즘을 통해 이상값을 감지하고 필요에 따라 삭제하거나 교체할 수 있습니다. 이러한 방법은 데이터를 정리하고, 모델 정확도를 향상시키며, 보다 신뢰할 수 있는 데이터 분석 및 예측을 수행하는 데 도움이 될 수 있습니다.

코드 예제의 전체 구현은 GitHub에서 확인할 수 있습니다. 이 글이 여러분의 공부와 실천에 도움이 되기를 바랍니다.

참조:

  • [PHP의 이상 탐지를 위한 격리 포레스트](https://github.com/lockeysama/php_isolation_forest)
  • [AnomalyDetectionPHP](https://github.com/zenthangplus/AnomalyDetectionPHP)

위 내용은 PHP와 머신러닝: 이상 탐지 및 이상치 처리 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.