Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于第二章感知机的代码 #75

Closed
zhaoxinjie opened this issue Apr 9, 2019 · 4 comments
Closed

关于第二章感知机的代码 #75

zhaoxinjie opened this issue Apr 9, 2019 · 4 comments

Comments

@zhaoxinjie
Copy link

相关章节

CH02

相关主题

            yy_ = 2 * y[index] - 1
            wx = np.dot(self.w, xx_)

            if wx * yy_ > 0:
                correct_count += 1
                if correct_count > self.max_iter_:
                    break
                continue

想知道 1.yy_ 为什么不是直接取的类别的值,而是乘以2-1,2.按照算法2.1理解,终止条件应该是没有误分类点或者迭代到最大次数,这里用准确次数大于迭代次数合适吗

@SmirkCao
Copy link
Owner

SmirkCao commented Apr 9, 2019

@zhaoxinjie
先回答第一个问题
感知机是二分类,常用的是$y\in \Y ={-1,+1}$,这种情况直接用y就OK
但是还有一种二分类标签用$y\in \Y ={0,1}$,为了兼容用这种标签的数据形式,做了这个操作实现标签从${0,1}$到${-1,+1}的映射。
这样会把$\Y={+1,-1}$映射到$\Y={+1,-3}$,符号没有变化。

@zhaoxinjie
Copy link
Author

哇,原来如此,百思不得其解,被你一语道破,太谢谢了!

@SmirkCao
Copy link
Owner

@zhaoxinjie
回答第二个问题
这部分代码写的不好

if wx * yy_ > 0:
    correct_count += 1
    if correct_count > self.max_iter_:
        logger.info(correct_count)
        break
    continue
self.w += self.eta_ * yy_ * xx_
n_iter_ += 1

这里面用了continue会跳过后面的n_iter_累加,所以又加了correct_count来判
我在review03的branch里面push了个新的更新

if wx * yy_ <= 0:
    self.w += self.eta_ * yy_ * xx_
n_iter_ += 1

不知道这样是不是可接受。

大多数算法都用到wx+b,刷参数,无论刷出来是否高效,最后可能都能用。这个就是算法有意思的地方吧。

@SmirkCao
Copy link
Owner

哇,原来如此,百思不得其解,被你一语道破,太谢谢了!

其实这个也有点问题,是不是? 相当于有一个方向调整的学习率要大一些。
反正,能用再说,具体问题具体看吧。算法不能离开数据集,和数据在一起才是完整的算法。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants