您将使用哪种学习算法来构建人类解决给定数独情况需要多长时间的模型?
我对机器学习、模式识别、数据挖掘等及其底层理论和系统没有太多经验。
我想开发一个人工模型来计算人类在给定的数独谜题中采取行动所需的时间。
因此,我正在寻找的机器学习过程的输出是一个模型,该模型可以预测目标人类在给定数独情况下采取行动需要多长时间。
相同的输入并不总是映射到相同的结果。在相同的情况下,人类采取行动所需的时间不同,但我的假设是,最终的概率分布存在某种趋势。 (我有根据的猜测是,这是〜正常的。)
我对影响分布的因素有一些想法(例如#empty slot),但最好将其留给系统来找出这些模式。请注意,我对模式不感兴趣,只对模型感兴趣。
我可以通过运行数独谜题并测量移动所需的时间来轻松生成样本和测试数据。
您建议为此使用哪种学习算法?
我正在考虑神经网络,但我不确定它们是否可以具有为相同输入提供加权随机结果的所需属性。
I don't have much experience in machine learning, pattern recognition, data mining, etc. and in their underlying theory and systems.
I would like to develop an artificial model of the time it takes a human to make a move in a given Sudoku puzzle.
So what I'm looking for as an output from the machine learning process is a model that can give predictions on how long does it take for a target human to make a move in a given Sudoku situation.
Same input doesn't always map to same outcome. It takes different times for the human to make a move with the same situation, but my hypothesis is that there's a tendency in the resulting probability distribution. (My educated guess is that it is ~normal.)
I have ideas about the factors that influence the distribution (like #empty slots) but would preferably leave it to the system to figure these patterns out. Please notice, that I'm not interested in the patterns, just the model.
I can generate sample and test data easily by running sudoku puzzles and measuring the times it takes to make the moves.
What kind of learning algorithm would you suggest to use for this?
I was thinking NNs, but I'm not sure if they can have the desired property of giving weighted random outcomes for the same input.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果我理解正确的话,你有一个长度为 81 的输入向量,如果正方形被填充,则包含 1,否则包含 0。您想要学习一个返回概率分布的函数,该概率分布模拟人类对该棋盘位置的响应时间。
我的第一反应是这是一个回归问题,您应该尝试简单的线性回归。这不会为您提供响应时间的分布,而是为您提供单个“最佳猜测”响应时间。
我不清楚为什么要对响应时间的分布进行建模。但是,如果您确实想要输出分布,那么听起来您想查看贝叶斯方法。我并不是贝叶斯推理方面的专家,所以我无法在这里为您提供更多帮助。
然而,我真的不认为你的方法会起作用,因为我同意你对诸如空槽数量之类的重要功能的直觉。还有其他明显的特征,例如每行/列的空槽数可能很重要。将这些特征明确地放入您的表示中可能比期望学习算法自行推断出类似的东西要成功得多。
If I understand this correctly you have an input vector of length 81, which contains 1 if the square is filled in and 0 otherwise. You want to learn a function which returns a probability distribution which models the response time of a human to that board position.
My first response would be that this is a regression problem and you should try straightforward linear regression. This will not provide you with a distribution of response times, but a single 'best-guess' response time.
I'm not clear on why you want to model a distribution of response times. However, if you really want to do want to output a distribution then it sounds like you want to look at Bayesian methods. I'm not really an expert on Bayesian inference, so I can't help you much further here.
However, I don't really think your approach is going to work because I agree with your intuition about features such as the number of empty slots being important. There are also other obvious features, such as the number of empty slots per row/column that are likely to be important. Explicitly putting these features in your representation will probably be much more successful than expecting that the learning algorithm will infer something similar on its own.
蒙特卡罗方法似乎在这里很有效,但需要一堆月球大小的解决方案才能真正做到这一点。它不会给你每个人的时间,而只会给你平均的时间。
我对此的理解虽然很脆弱,但你有一个数据库,其中包含棋盘位置以及人类采取下一步行动所需的时间。至少你有一个大多数动作的起点。即使它不在数据库中,您也可以开始根据某种算法计算移动需要多长时间。尽管我知道您已经指定希望机器学习来做到这一点,但可能值得将问题分割成更小的问题,然后在此基础上进行构建。
The monte carlo method seems like it would work well here but would require a stack of solutions the size of the moon to really do it. And it wouldn't give you the time per person, just the time on average.
My understanding of it, tenuous as it is, is that you have a database with a board position and the time it took a human to make the next move. At the very least you have a starting point for most moves. Even if it's not in the database you could start to calculate how long it would take to make a move based on some algorithm. Though I know you had specified you wanted machine learning to do this it might be worth segmenting the problem into something a little smaller then building on it.
如果您对影响函数的因素(空单元格数量等)有一些猜测,请尝试在特征向量上训练分类器,而不是在 81 个单元格向量(0/1 或0..9,对我的论点来说并不重要)。
我认为你的主张:
是错误的。您确实必须为网络提供正确的域。例如,当尝试检测图像中的对象时,在像素域中工作是没有意义的。只有首先运行一些特征检测来检测边缘、角等,您才会获得结果。
理论上,只要有足够的非线性(在神经网络中——网络中足够多的层),它就可以检测到这样的事情,但在实践中,我从未见过这种方法在不给分类器提供正确的特征的情况下起作用。
你只是想学习一个从 2^81 或 10^81(或者我建议的更小的特征空间)到 R(0 到 Inf 之间的响应时间)或它的一些离散化的函数。所以神经网络和其他分类器可以做到这一点。
If you have some guesstimate as to what influences the function (# of empty cell, etc), try to train a classifier on a vector of features, and not on the 81 cells vector (0/1 or 0..9, doesn't really matter for my argument).
I think that your claim:
is wrong. you do have to give the network the right domain. for example, when trying to detect object in an image, working in the pixel domain is pointless. you'll only get results if you first run some feature detection to detect edges, corners, etc.
Theoretically, with enough non-linearity (in NN - enough layers in the network) it can detect such things, but in practice, I have never seen that work, without giving the classifier the right features to work with.
You're just trying to learn a function from 2^81 or 10^81 (or a much smaller feature space as I suggest) to R (response time between 0 and Inf) or some discretization of that. So NN and other classifiers can do that.