机器学习简单实验(梯度下降)

用梯度下降算法实现上一篇的简单分类:

# -*- coding: utf-8 -*-
# easy_linear_learning2.py
import numpy as np
b = 1
a = 0.5
x = np.array([[1,1,3],[1,2,3],[1,1,8],[1,2,15]])
d = np.array([1,1,-1,-1])
w = np.array([b,0,0])
error = 0
ddcount = 50
def sgn(v):
    if v>0:
        return 1
    else:
        return -1
def comy(myw,myx):
    return sgn(np.dot(myw.T,myx))
def gradient(myw,myx,mya):
    i = 0
    sum_x = np.array([0,0,0])
    for xn in myx:
        if comy(myw,xn) != d[i]:
            sum_x += d[i]*xn
        i += 1
    return mya*sum_x
i = 0
while True:
    grad = gradient(w,x,a)
    w = w + grad
    i = i+1
    if abs(grad.sum())<=error or i>=ddcount:break
test = np.array([1,9,19])
print "%d  %d => %d "% (test[1],test[2],comy(w,test))
test = np.array([1,3,22])
print "%d  %d => %d "% (test[1],test[2],comy(w,test)
In [2]:

grad

Out[2]:

array([ 0.,  0.,  0.])

In [3]:

grad.sum()

Out[3]:

0.0

In [4]:

i

Out[4]:

6

可以看到,6次迭代后grad.sum()就已经为0,最后分类结果正确:

9  19 => 1 
3  22 => -1 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值