机器学习基石第三次课代码

机器学习基石第三次课代码

import urllib2
import numpy as np
from math import exp

# url = 'https://d396qusza40orc.cloudfront.net/ntumlone%2Fhw3%2Fhw3_test.dat'
# f = urllib2.urlopen(url)
# with open("hw3_train.dat", "wb") as code:
#    code.write(f.read())

def train_PLA(wn, xn, yn, index):
    # wn = wn + learn_rate * logistic.pdf(0 - yn[i] * (np.dot(wn, xn[i].transpose()))) * yn[i] * xn[i] #SGD
    v = 0
    learn_rate = 0.001

    for k in range(0, len(xn)):
        theta = 1 / (1 + exp(-(-1) * yn[k] * np.dot(wn, xn[k].transpose())))
        v += theta * yn[k] * xn[k]
    v = v * 1. / len(xn)

    # theta = 1 / (1 + exp(-(-1) * yn[index] * np.dot(wn, xn[index].transpose())))
    # v += theta * yn[index] * xn[index]
    wn = wn + learn_rate * v

    return wn

def test_PLA(wn, xn, yn):
    error_rate = 0
    for i in range(0, len(xn)):
       if (np.dot(wn, xn[i]) * yn[i] < 0):
           error_rate += 1
    return error_rate * 1. / len(xn)


#load data
def load_data(filename):
    code = open(filename, "r")
    lines = code.readlines()
    xn = np.zeros((len(lines), 21)).astype(np.float)
    yn = np.zeros((len(lines),)).astype(np.int)

    for i in range(0, len(lines)):
        line = lines[i]
        line = line.rstrip('\r\n').replace('\t', ' ').split(' ')
        xn[i, 0] = 1
        for j in range(1, 21):
            xn[i, j] = float(line[j])
        yn[i] = int(line[21])
    return xn, yn


train_xn, train_yn = load_data('hw3_train.dat')
test_xn, test_yn = load_data('hw3_test.dat')

error_rate = 0
wn = np.zeros((21, )).astype(np.float)
for i in range(2000):
    wn = train_PLA(wn, train_xn, train_yn, i % train_xn.shape[0])
    error = test_PLA(wn, test_xn, test_yn)
    error_rate += error
    print 'random :', i, '  error_rate: ', error
print 'Eout: ', error_rate / 2000.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值