Python 은 KNN 알고리즘 을 기반 으로 한 필적 식별 기능 에 대한 상세 한 설명 을 실현 합 니 다.
필요:
데 이 터 는 모두 785 열 로 첫 번 째 열 은 label 이 고 나머지 784 열 데 이 터 는 그 레이스 케 일 이미지(0~255)의 픽 셀 값 28*28=784 를 저장 합 니 다.
KNN(K 근접 알고리즘):
훈련 에서 새로운 데이터 와 가장 가 까 운 K 조 기록 을 집중 적 으로 찾 아 그들의 주요 분류 에 따라 새로운 데이터 의 유형 을 결정 한다.
이곳 의 주요 분 류 는 서로 다른 판별 근거 가 있 을 수 있다.예 를 들 어'가장 많 음','최근 이웃',또는'거리 가중'등 이다.
전체 프로그램의 몇 부분:
1.데이터 의 정규 화 처리(normalization)
2.(중요)test 데이터 와 가장 가 까 운 train 데이터 의 번 호 를 찾 아 번호 에 따라 해당 하 는 label 을 찾 아 label 을 test 데이터 에 대한 예측 치 를 부여 합 니 다.
3.통계 적 으로 알 고 있 는 test 의 label 값 과 test 의 예측 label 가치 정확도
Step 1
Numpy 와 Pandas 라 이브 러 리 가 져 오기
import numpy as np
import pandas as pd
Step 2데이터 를 귀 일화 하 다
데 이 터 를 획일 화 하 는 방법 은 매우 많다.예 를 들 어:
1.max-min 표준화
max-Min 표준화 방법 은 원시 데 이 터 를 선형 으로 변환 하 는 것 이다.minA 와 maxa 를 각각 속성 A 의 최소 값 과 최대 값 으로 설정 하고 A 의 원시 값 x 를 max-min 표준 화 를 통 해 구간[0,1]에서 의 값 x 로 매 핑 합 니 다.그 공식 은:
새 데이터=(원 데이터-극소 값)/(최대 값-극소 값)
둘째,
새 데이터=원 데이터/(원 데이터 의 제곱 과 루트 번호)
셋째,
y=(x-min)/(max-min)그 중에서 min 은 x 의 최소 값 이 고 max 는 x 의 최대 값 이 며 입력 벡터 는 x 이 며 귀 일 화 된 출력 벡터 는 y 이다.이 식 은 데 이 터 를[0,1]구간 으로 정규 화하 고 활성화 함수 가 S 형 함 수 를 사용 할 때(값 영역(0,1)이 식 이 적 용 됩 니 다.
여기 서 방법 2.
def normalize(x):
norms = np.apply_along_axis(np.linalg.norm,1,x)
return x / np.expand_dims(norms,-1)
np 의linalg.norm(x)
와apply_along_axis(func, axis, x)
함 수 를 호출 합 니 다.linalg.norm(x)
함수 의 작용 은return sum(abs(xi)**2)**0.5
,apply_along_axis(func, axis, x)
함수 의 작용 은 x 를 axis 방향 으로 func 함 수 를 집행 하 는 것 이 고,axis=0 은 열 방향의 연산 을 하고,axis=1 은 행 방향의 연산 을 하 는 것 을 나타 낸다step 3
test 데이터 와 가장 가 까 운 train 데 이 터 를 찾 는 것 이 가장 중요 하 다.
여기 서 test 데이터 와 train 데 이 터 는 공간의 두 벡터 이 고 문 제 는 이 두 벡터 의 유사 도 를 어떻게 계산 하 느 냐 가 되 었 다.
우 리 는 그것들 을 공간 속 의 두 선 으로 상상 할 수 있다.모두 원점([0,0,...]에서 출발 하여 서로 다른 방향 을 가리킨다.두 선분 사이 에 하나의 협각 이 형성 되 는데 협각 이 0 도이 면 방향 이 같 고 선분 이 겹 치 는 것 을 의미한다.협각 이 90 도 라면 직각 이 형성 되 고 방향 이 전혀 비슷 하지 않다 는 것 을 의미한다.협각 이 180 도 라면 방향 이 정반 대 라 는 뜻 이다.따라서 우 리 는 협각 의 크기 를 통 해 벡터 의 유사 도 를 판단 할 수 있다.협각 이 작 을 수록 비슷 하 다 는 뜻 이다.
a 벡터 가[x1,y1]이 고 b 벡터 가[x2,y2]라 고 가정 하면 코사인 정 리 를 다음 과 같은 형식 으로 바 꿀 수 있다.
여 현 정리
def nearest_neighbor(norm_func,train_data,train_label,test_data):
train_data = norm_func(train_data)
test_data = norm_func(test_data)
cos = np.dot(train_data,np.transpose(test_data))#np.transpose ,dot , cos test train
max_cos = np.argmax(cos,axis=0)#np.argmax cos
test_pred = train_label[max_cos]#train_label ,max_cos ,train_label[max_cos] train_label max_cos
return test_pred# test
step 4통계 예측 치 의 정확도
def validate(test_pred,test_label):
c=len(test_pred)# ,len , ,
correct=(test_pred == test_label).sum()#
return float(correct)/c# , correct/c 0
테스트 코드:
if __name__ == '__main__':
train_num = 200
test_num = 300# test_num-train_num
x = pd.read_csv('train.csv')
x_train = x.values[0:train_num,1:]# pandas , data.values[]
x_train_label = x.values[0:train_num,0]# label,
x_test = x.values[train_num:test_num,1:]
x_test_label = x.values[train_num:test_num,0]
test_pred=nearest_neighbor(normalize,x_train,x_train_label,x_test)
prec=validate(test_pred,x_test_label)
print u" %.2f"%(prec)# %f
전체 코드 는 여 기 를 클릭 하 십시오본 사이트 다운로드.주석:
위 부분 은 주로 KNN 알고리즘 을 설명 하고 기 존의 28*28 의 데 이 터 를 활용 하 는데 실제 필적 분석 을 할 때 먼저 이미 지 를 행렬 데이터 로 전환 해 야 한다.
이제 이미지 가 행렬 과 행렬 로 바 뀌 어 이미지 로 바 뀌 는 방법 을 소개 합 니 다.
매트릭스 가 이미지 로 전환
필요 한 라 이브 러 리 는 이미지 처리 라 이브 러 리 Python Imaging Library(PIL)입 니 다.
Windows 에서 pip install PIL 설치 에 실 패 했 습 니 다.PIL.exe 를 다운로드 하여 더 블 클릭 으로 설치 하 는 방법 을 취 했 습 니 다.
다운로드 주소:
PIL 공식 다운로드 주소
import pandas as pd
import numpy as np
from PIL import Image
# load data
train = pd.read_csv('train.csv')
# now draw the numbers
for ind, row in train.iloc[0:3].iterrows():#iloc ( ) 3
i = row[0]#[0]
arr = np.array(row[1:], dtype=np.uint8)#1-784 ,,uint8 8
#arr = np.array(255 - row[1:], dtype=np.uint8)# , 255
arr.resize((28, 28))# 28*28
#save to file
im = Image.fromarray(arr)
im.save("./train_pics/%s-%s.png" % (ind, i))# %s(ind) , %s , ,
.iloc()방법
iloc[ , ]
df.iloc[1,1]# , ,
df.iloc[0,2],:]#
그림 이 행렬 로 바뀌다필요 한 라 이브 러 리 는
opencv(open source computer vision)
입 니 다.다운로드 설치 방식 은 부록 을 참조 하 십시오.python_OpenCV 설치여 기 는 주로 그것 의 몇 가지 간단 한 기능 을 말한다.
1.정적 이미지 의 입력,출력
cv2.imread('xxx.png')# ,# image image.shape = (w,h,3),w*h ,3 BGR channel , 0~255
cv2.imwrite('xxx.jpg', image)#
2.그림 을 그 레이스 케 일 로 변환
# channel ,0~255
grayImage = cv2.imread('xxx.png',cv2.CV_LOAD_IMAGE_GRAYSCALE)
3.그림 의 크기 변경
print grayImage.shape# shape,shape (137,301), size, 42137(41237=137*301)
res=cv2.resize(grayImage,(28,28),interpolation=cv2.INTER_CUBIC)# grayImage cv2.INTER_CUBIC (28,28)
변환 방법:
import cv2
image = cv2.imread('111.png')#
cv2.imwrite('111.jpg', image)#
grayImage = cv2.imread('111.png',cv2.CV_LOAD_IMAGE_GRAYSCALE)
print grayImage.shape
res=cv2.resize(grayImage,(28,28),interpolation=cv2.INTER_CUBIC)
#
cv2.imshow('test',grayImage)#
cv2.imshow('change',res)#
#
k=cv2.waitKey(0)
if k==27:#27 ESC
cv2.destroyWindow()
cv2.imshow()
그림 을 창 에 표시 하 는 데 사용 합 니 다.그 다음 에cv2.waitKey()
함 수 를 따라 야 표시 가 지속 되 고 그렇지 않 으 면 표시 프로그램 이 중단 되 고 창 이 닫 힙 니 다.cv2.waitKey()
함 수 는 키 보드 를 캡 처 하 는 입력 이 고cv2.destroyWindow()
는 방출 창 입 니 다.그림 을 읽 고 출력 하 는 것 을 배 운 후에 우 리 는 쓴 KNN 알고리즘 으로 우리 의 필적 을 식별 할 수 있다.
질문:
나 는 손 으로 쓴 데 이 터 를 많이 사용 하여 식별 이 정확 한 지 검증 하 였 는데,정확도 가 아직 높 지 않다 는 것 을 발견 하 였 다.문제
1.그림 의 크기 문제,크기 조절 은 전체 그림 을 28*28 의 그림 으로 바 꾸 는 것 이 아니 라 숫자 가 적 힌 중심 그림 을 식별 하여 옆 에 있 는 흰 쪽 을 없 애 야 한다.
2.손 으로 쓴 숫자 사진 은 글 씨 를 쓰 는 곳 이 검은색 이 라 고 장담 할 수 없습니다(픽 셀 값 255)
해결 방법:종이,촬영 문제 로 인 한 픽 셀 값 을 낮 추 는 필 터 를 사용 해 야 합 니 다.더 이상 필 터 를 사용 하지 않 은 조건 에서 나 는 사진 을 화판 에 쓴 숫자 로 바 꾸 었 다.
3.글씨 의 굵기 는 판단 에 영향 을 미친다
해결 방법:이것 은 훈련 견본 이 많 지 않 고 전체적인 훈련 견본 의 필적 이 굵 어서 가 는 필적 을 입력 할 때 식별 할 수 없 는 것 일 수 있 습 니 다.그리고 입력 글씨체 의 굵기 를 측정 하고 입력 한 가 는 필적 을 팽창 처리 하 며 굵 은 필적 을 부식 처리 해 야 한다.
첨부:pythonOpenCV 설치
인터넷 에서 많은 튜 토리 얼 을 본 것 은 VS 환경 에서 OpenCV 의 설치 이 고 저 는 windows 7,32 비트,sublime+cmd 환경 에서 python 의 프로 그래 밍 을 했 기 때문에 이런 조건 에서 OpenCV 의 설 치 를 생각 했 습 니 다.
pip install numpy 문 구 를 사용 하여 numpy 를 설치 합 니 다.
(오류 가 발생 하면:Microsoft Visual C++9.0 is required
opencv2.4.10 다운로드 하 다.
다운로드 후 압축 풀기(어디 에 압축 풀기),압축 풀기 디 렉 터 리 opencv 폴 더 에서 build->python->2.7->x86 의 파일 cv2.pyd 를 python 2.7\Lib\site-packages 에 복사 합 니 다.
설치 에 성 공 했 는 지 테스트 합 니 다.디 렉 터 리 에 있 는 sources\samples\python\\drawing.py 를 실행 하거나 python 환경 에 들 어가 서 사용 합 니 다
import cv2
더 많은 파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.