"오리지널" 기계 학습 알고리즘 의 R 언어 구현 (1): KNN
1. 정밀도 가 높 고 이상 치 에 민감 하지 않 음
2 、 수치 형 속성 만 처리
3. 계산 복잡 도가 높다 (이미 분 류 된 견본 수가 n 이면 모든 미 지 의 분류 점 에 대해 n 개의 거 리 를 계산 해 야 한다)
KNN 알고리즘 단계:
모든 견본 점 (이미 알 고 있 는 분류 + 미 지 의 분류) 을 귀 일화 처리 해 야 한다.
그 다음 에 알 수 없 는 분 류 된 데이터 가 집 중 된 모든 견본 점 에 대해 다음 과 같은 조작 을 순서대로 집행 한다.
1. 이미 알 고 있 는 분류 데이터 집중 점 과 현재 점 (알 수 없 는 분류) 의 거 리 를 계산 합 니 다.
2. 거리 에 따라 정렬
3. 현재 거리 와 가장 작은 k 개 점 선택
4. 앞의 k 개 점 이 있 는 유형의 출현 빈 도 를 확인한다.
5. 돌아 가기 전 k 개 점 에서 주파수 가 가장 높 은 유형 을 현재 점 의 예측 유형 으로 한다.
머 신 러 닝 알고리즘 R 구현 - KNN
# iris ,iris 150 , head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## Sepal.Length\Sepal.Width\Petal.Length\Petal.Width ,Species
# 1、 iris ,scale (x-mean(x))/sqrt(var(x))
iris_s <- data.frame(scale(iris[, 1:4]))
iris_s <- cbind(iris_s, iris[, 5])names(iris_s)[5] = "Species"
# 1、 iris 100
sample.list <- sample(1:150, size = 100)
iris.known <- iris_s[sample.list, ]
# 2、 50 ( )
iris.unknown <- iris_s[-sample.list, ]
## 3、 , , ,
length.known <- nrow(iris.known)length.unknown <- nrow(iris.unknown)
for (i in 1:length.unknown) {
# dis
dis_to_known <- data.frame(dis = rep(0, length.known))
for (j in 1:length.known) {
#
dis_to_known[j, 1] <- dist(rbind(iris.unknown[i, 1:4], iris.known[j,1:4]), method = "euclidean")
#
dis_to_known[j, 2] <- iris.known[j, 5] names(dis_to_known)[2] = "Species"
}
#
dis_to_known <- dis_to_known[order(dis_to_known$dis), ]
# Knn K, K
k <- 5
#
type_freq <- as.data.frame(table(dis_to_known[1:k, ]$Species))
#
type_freq <- type_freq[order(-type_freq$Freq), ]
#
iris.unknown
[
i,
6
]
<-
type_freq
[
1,
1
]
}
names
(
iris.unknown
)
[
6
]
=
"Species.pre"
\ # 출력 분류 결과
iris.unknown
[,
5
:
6
]
## Species Species.pre
## 3 setosa setosa
## 4 setosa setosa
## 5 setosa setosa
## 7 setosa setosa
## 15 setosa setosa
## 20 setosa setosa
## 21 setosa setosa
## 30 setosa setosa
## 33 setosa setosa
## 35 setosa setosa
## 36 setosa setosa
## 38 setosa setosa
## 40 setosa setosa
## 41 setosa setosa
## 49 setosa setosa
## 51 versicolor versicolor
## 54 versicolor versicolor
## 56 versicolor versicolor
## 57 versicolor versicolor
## 59 versicolor versicolor
## 63 versicolor versicolor
## 70 versicolor versicolor
## 74 versicolor versicolor
## 75 versicolor versicolor
## 78 versicolor versicolor
## 80 versicolor versicolor
## 87 versicolor versicolor
## 89 versicolor versicolor
## 95 versicolor versicolor
## 96 versicolor versicolor
## 98 versicolor versicolor
## 100 versicolor versicolor
## 103 virginica virginica
## 108 virginica virginica
## 112 virginica virginica
## 115 virginica virginica
## 117 virginica virginica
## 119 virginica virginica
## 122 virginica virginica
## 124 virginica versicolor
## 127 virginica virginica
## 129 virginica virginica
## 130 virginica virginica
## 131 virginica virginica
## 132 virginica virginica
## 134 virginica versicolor
## 142 virginica virginica
## 144 virginica virginica
## 148 virginica virginica
## 149 virginica virginica
위의 결과 에서 species 는 샘플 의 실제 분류 이 고 species. pre 는 Knn 알고리즘 의 분류 이다.여러 차례 의 실험 을 통 해 50 개의 견본 중 5 개 정도 의 견본 의 분류 판단 이 잘못 되 었 고 정 답 률 은 90% 이다.이 를 통 해 알 수 있 듯 이 Knn 알고리즘 은 효과 가 비교적 좋 고 원 리 는 이해 하기 쉽다.
knn 알고리즘 에 존재 하 는 문제점: 1. k 값 의 확정 은 어 려 운 문제 입 니 다.2. 만약 에 가장 가 까 운 k 개 이미 알 고 있 는 분류 견본 중에서 빈도수 가 가장 높 은 유형 이 여러 개 (빈도수 가 같 음) 라면 어떻게 알 수 없 는 견본 에 대한 분 류 를 선택 합 니까?지금 보니까 랜 덤 이 야.3. 만약 에 n 개의 알 수 없 는 유형 견본 이 있 고 m 개의 알 수 있 는 유형 견본 이 있 으 면 n * m 의 거 리 를 계산 해 야 하고 계 산 량 이 비교적 많 으 며 모든 데이터 집합 을 저장 해 야 하 며 공간 복잡 도도 비교적 크다.4. 예측 한 견본 을 이미 알 고 있 는 유형 집합 에 분류 하여 나머지 미 지 의 유형 견본 을 분류 할 수 있 습 니까?5. 귀 일 화 는 모든 처리 의 맨 앞 에 두 어야 한다. 그러면 모든 견본 집합 (이미 알 고 있 는 분류 + 미 지 의 분류) 을 알 고 분류 기 를 구축 해 야 한다. 그러나 실제 미 지 의 분류 견본 이 반드시 사전에 얻 을 수 있 는 것 이 아니 라 어떻게 귀 일 화 된 처 리 를 할 수 있 습 니까?
노트
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.