Ok chúng ta hãy giả sử bạn có điểm dữ liệu của bạn trong một mảng như sau:
<?php $dataset = array(20.50, 80.30, 70.95, 15.25, 99.97, 85.56, 69.77); ?>
Sau đó, bạn có thể sử dụng chức năng sau đây (xem bình luận về những gì đang xảy ra) để loại bỏ tất cả các số đó nằm ngoài của giá trị trung bình +/- lần độ lệch chuẩn một cường độ bạn đặt (mặc định là 1):
<?php
function remove_outliers($dataset, $magnitude = 1) {
$count = count($dataset);
$mean = array_sum($dataset)/$count; // Calculate the mean
$deviation = sqrt(array_sum(array_map("sd_square", $dataset, array_fill(0, $count, $mean)))/$count) * $magnitude; // Calculate standard deviation and times by magnitude
return array_filter($dataset, function($x) use ($mean, $deviation) { return ($x <= $mean + $deviation && $x >= $mean - $deviation); }); // Return filtered array of values that lie within $mean +- $deviation.
}
function sd_square($x, $mean) {
return pow($x - $mean, 2);
}
?>
Ví dụ bạn chức năng này trả về sau với cường độ 1:
Array
(
[1] => 80.3
[2] => 70.95
[5] => 85.56
[6] => 69.77
)
Nguồn
2013-03-02 14:02:56
Ngoại lệ dựa trên những gì? – dynamic
có lẽ với phần mở rộng toán học: [http://www.php.net/manual/en/book.stats.php](http://www.php.net/manual/en/book.stats.php) – bitWorking
@ llnk dựa trên các con số trong kết quả đã cho. Từ những gì tôi hiểu, các ngoại lệ sẽ dựa trên các phần tư bên trong và bên ngoài ... nhưng sau đó một lần nữa, tôi dễ dàng thừa nhận tôi không giỏi toán học thống kê. – eComEvo