다음과 같이 내 작업이다 : 나는 X, 직교 좌표계에서 y는 시스템 좌표 직교 좌표 좌표 열 X, Y, Class
있는 테이블과 지점의 예를 들어, 클래스가 클래스 1, 클래스 2). 별도의 클래스 포인트가 좌표계의 독립적 인 두 부분에있는 방식으로 평면을 나누는 선을 찾아야합니다. 선형 분류자를 사용한 것은 처음입니다. 나는 하나의 select
쿼리를 사용하여 이것을 어떻게 달성 할 수 있을지 궁금합니다. 서브 쿼리가 허용됩니다.는 데이터베이스에 저장
1
A
답변
1
나의 첫 번째 반응은 이것이 SQL의 문제가 아니므로 통계/데이터 분석 소프트웨어를 찾아 봐야한다는 것입니다. 이러한 "최상의"라인은 SVM (Support Vector Machine)에서 제공하므로 사용자가 직접 찾을 수 있습니다.
그러나 시간이 많거나 포인트가 거의없는 경우 무차별 방식을 시도 할 수 있습니다. 즉, 가능한 라인 목록을 살펴보고 얼마나 잘 분할되어 있는지 확인하십시오.
따라서 행에 방정식 y = mx + b
이 있다고 가정합니다. 여기 다른 경사면을 가진 일련의 선들을 시험해 봅니다. y - mx + b
이 양수인지 음수인지에 따라 줄의면을 테스트 할 수 있습니다. 그런 다음 각 측면 및 각 범주에 대해이를 집계하고 일부 논리를 사용하여 범주에 대한 측면을 선택합니다. 이를 위해
with nums as ( -- get a bunch of nums
select row_number() over (order by null) as n
from information_schema.columns c
),
m as (
select n - 10 as m -- from -10 to 10
from nums
where n <= 21
),
b as (
select n - 10 as b -- from -10 to 10
from nums
where n <= 21
)
lines as (
select m, b
from m cross join b
)
select m, b,
(case when cat1_side1 > cat1_side2 then 'side1' else 'side2'
end) as cat1_side,
(case when cat1_side1 > cat1_side2 then cat1_side1 else cat1_side2
end) as cat1_correct,
(case when cat1_side1 > cat1_side2 then 'side2' else 'side1'
end) as cat2_side, -- force cat2 to the other side
(case when cat1_side1 > cat1_side2 then cat2_side2 else cat2_side1
end) as cat2_correct
from (select l.m, l.b,
sum(case when p.category = 'cat1' and p.y - (p.x*l.m + l.b) < 0
then 1 else 0
end) as cat1_side1_cnt,
sum(case when p.category = 'cat1' and p.y - (p.x*l.m + l.b) > 0
then 1 else 0
end) as cat1_side2_cnt,
sum(case when p.category = 'cat2' and p.y - (p.x*l.m + l.b) < 0
then 1 else 0
end) as cat2_side1_cnt,
sum(case when p.category = 'cat2' and p.y - (p.x*l.m + l.b) > 0
then 1 else 0
end) as cat2_side2_cnt,
from points p cross join
lines l
group by l.m, l.b, p.category
) lp
order by (cat1_correct + cat2_correct) desc
참고 이것은, 차례 차례로, 당신은 선택할 수 없습니다 카테고리 2의 다른 측면을 강제로 모든 데이터 요소가 선의 한면에있을 수 있기 때문에 각면에 가장 적합한면입니다.
또한 수직선에서는 작동하지 않지만 가까이 오게됩니다.
이 문제를 해결하는 가장 좋은 방법은 이 아니며이 아님을 나타냅니다. 그러나 데이터 포인트 수가 적 으면 실제로 제대로 작동 할 수 있습니다.
관련 문제
- 1. 는 데이터베이스에 이미지를 저장
- 2. 이미지 소스를 데이터베이스에 저장
- 3. 데이터베이스에 현재 날짜 저장
- 4. 데이터베이스에 쿠키 저장
- 5. Ajax 저장 버튼이있어서 데이터베이스에 저장
- 6. 데이터베이스에 나무 저장
- 7. 데이터베이스에 데이터 저장 오류
- 8. jEditable - 데이터베이스에 저장
- 9. 데이터베이스에 사용자 저장
- 10. 데이터베이스에 이미지 경로 저장
- 11. 는 저장
- 12. 는 저장
- 13. 는 예외없이 함께 저장, 나는 데이터베이스에 주소를 암호화 할
- 14. 세션 데이터에 저장 대 임시 데이터베이스에 대한 SQL 데이터베이스에 저장
- 15. elmah 오류 처리 - 데이터베이스에 저장
- 16. 데이터베이스에 html 콘텐츠 저장
- 17. 데이터베이스에 이미지 맵 저장
- 18. 데이터베이스에 앰퍼샌드 저장
- 19. LINQ : 데이터베이스에 파일 저장
- 20. 외부 데이터베이스에 이미지 저장
- 21. 데이터베이스에 특수 문자 저장
- 22. 데이터베이스에 앱 설정 저장
- 23. 데이터베이스에 송장 저장
- 24. 데이터베이스에 이미지 저장
- 25. 데이터베이스에 큰 배열 저장
- 26. XAML 파일을 데이터베이스에 저장
- 27. 데이터베이스에 워크 플로 저장
- 28. 데이터베이스에 날짜 저장
- 29. 데이터베이스에 ascx 저장
- 30. 데이터베이스에 HTML 페이지 저장