통계 학습 방법 제2장 예제 2.2 코드 실천, 감지기의 대구 형식의 코드 실현
6091 단어 통계 학습 방법 예제 코드 실천
(주석 부분은 자신이 틀린 부분의 디버깅 코드이고 작은 백 코드 코드는 약간 마음에 든다)
#-*- coding:utf-8 -*-
import sys
from numpy import *
import os
from compiler.ast import flatten
reload(sys)
sys.setdefaultencoding('utf-8')
#
def loadDataset():
dataset=[[3,3],[4,3],[1,1]]
labels=[1,1,-1]
return dataset,labels
# sign
def function_sign(x):
if x>=0:return 1
else:return -1
# AMat W , flatten
def calc_w(mat1,mat2,labels):
mat2List=flatten(mat2.tolist())
m,n=mat1.shape
for i in range(m):
mat1[i] *= (mat2List[i]*labels[i])
return sum(mat1,axis=0).T
# AMat b
def judge_functon(dataMat,labels,labelsMat,b,m,AMat):
for i in range(m):
if (labels[i] * (sum(multiply(dataMat * dataMat[i].T, multiply(AMat, labelsMat))) + b)) <= 0:
#if (labels[i]*(sum(array(dataMat*dataMat[i].T)*labels*array(AMat.T))+b))<=0:
return True
return False
#
def perceptron(dataset,labels,alpha):
dataMat=mat(dataset)
m,n=shape(dataMat)
aArr=zeros((m,1))
AMat=mat(aArr);b=0
w=mat(zeros((n,1)))
labelsMat=mat(labels).T
#while ([function_sign(j) for j in array(dataMat * w+b)]) != labels:
while judge_functon(dataMat,labels,labelsMat,b,m,AMat):
#print array(dataMat*dataMat[i].T
for i in range(m):
#print sum(multiply(dataMat*dataMat[i].T,multiply(AMat,labelsMat))
if (labels[i]*(sum(multiply(dataMat*dataMat[i].T,multiply(AMat,labelsMat)))+b))<=0:
#if (labels[i]*(sum(array(dataMat*dataMat[i].T)*labels*array(AMat.T))+b))<=0:
#print array(dataMat*dataMat[i].T)*labels*array(AMat.T)
AMat[i] += alpha
b += alpha*labels[i]
#print AMat
#print b
return AMat,b
dataSet,labels=loadDataset()
dataMat=mat(dataSet);labelsMat=mat(labels)
AMat,b=perceptron(dataSet,labels,1)
print AMat,b
w=mat(calc_w(dataMat,AMat,labels))
print w,'
',b
결과는 다음과 같습니다.w= [[1] [1]] b= -3
made by zcl at CUMT
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
통계 학습 방법 제2장 예제 2.1 코드 실천이 프로그램은 통계 학습 제2장의 예제 2.1을 코드로 연산한다 made by zcl at CUMT...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.