Python 加权调整的机器学习

Python 加权调整的机器学习,python,machine-learning,weighting,Python,Machine Learning,Weighting,我正试图找出如何实现一些机器学习库来帮助我找出每个参数的正确权重,以便做出一个好的决策 更详细地说: 上下文:尝试为html文件实现发布日期提取器。这是为新闻网站,所以我没有一个通用的日期格式,我可以使用。我在python中使用dateutil中的解析器,它做得相当好。最后,我列出了可能的发布日期(html文件中的所有日期) 根据一组参数,例如关闭标记、日期子字符串附近的单词等,我根据作为发布日期的可能性对列表进行排序。每个参数的权重都是经过某种程度的猜测 我想实现一个机器学习算法,在一个训练期

我正试图找出如何实现一些机器学习库来帮助我找出每个参数的正确权重,以便做出一个好的决策

更详细地说:

上下文:尝试为html文件实现发布日期提取器。这是为新闻网站,所以我没有一个通用的日期格式,我可以使用。我在python中使用dateutil中的解析器,它做得相当好。最后,我列出了可能的发布日期(html文件中的所有日期)

根据一组参数,例如关闭标记、日期子字符串附近的单词等,我根据作为发布日期的可能性对列表进行排序。每个参数的权重都是经过某种程度的猜测

我想实现一个机器学习算法,在一个训练期(其中提供了实际发布日期)之后,它确定每个参数的权重

我一直在阅读python中不同机器学习库的文档(pyML、scikit learn、pybrain),但我没有发现任何有用的东西。我也读过,有一个确定蘑菇是否易读的例子

注意:我正在使用python


非常感谢您的帮助。

考虑到您的问题描述、YRU数据的特点以及您的ML背景和个人偏好,我推荐您

Orange是一个成熟的、免费的、开源的项目,有大量的ML算法和优秀的文档和培训材料。大多数用户可能使用Orange提供的GUI,但该框架可以使用Python编写脚本

因此,使用这个框架,当然可以让您快速试验各种分类器,因为(i)它们都在一个地方;和(ii)每个都通过通用配置语法GUI访问。Orange框架中的所有ML技术都可以在“演示”模式下运行 Orange安装附带的一个或多个示例数据集。提供的文件 在橙色的安装是极好的。此外,该主页还包含指向多个站点的链接 教程可能涵盖了框架中包含的所有ML技术

考虑到您的问题,可以从决策树算法(ID3或ID3实现)开始。Dobbs博士杂志(在线)的最新版本包括一篇关于使用决策树的优秀文章;用例是web服务器数据(来自服务器访问日志)

Orange有一个可从GUI(作为“小部件”)获得的。如果这太容易的话,用python编写一个代码只需要大约100行它是该语言的工作实现的源代码

出于几个原因,我建议从决策树开始

  • 如果它对您的数据有效,您将 不仅拥有训练有素的分类器, 但是你也会有一个视觉效果 全体代表 分类模式(表示 作为二叉树)。决策树在这方面在ML技术中(可能)是独一无二的

  • 数据的特征是 与最佳性能保持一致 C4.5情景;数据可以是 范畴的或连续的 变量(尽管这项技术 如果更多,性能会更好 要素(列/字段)离散 而不是持续的,这似乎 描述您的数据);也 决策树算法可以接受, 没有任何预处理, 不完整数据点

  • 简单的数据预处理。输入决策树的数据 算法不需要那么多 与大多数其他ML一样,数据预处理 技术;预处理通常是非常复杂的 (通常?)最耗时的 整个ML工作流中的任务。它是 也很少有记录,所以 可能也是最有可能的来源 一个错误

  • 您可以从每个节点到根的距离推断每个变量的(相对)权重——换句话说,从一个快速的视觉角度 对受训人员的检查 分类器。回想一下,经过训练的分类器 是一个仅仅是一个二叉树(通常是这样)中的节点 对应于一的一个值 功能(变量,或列表中的列) 数据集);两条边连在一起 这个节点当然代表了 数据点分为两组 基于每个点的值 特征(例如,如果特征是 “分类变量”发布 “HTML页面标题中的日期?”,然后 通过左边缘,将所有 数据点,其中 发布日期不在 打开和关闭头部标签,以及 右节点得到另一个节点 组)。它的意义是什么 这因为一个节点只代表 某一特定事物的状态或价值 变量,那个变量是 重要性(或重量) 可以推断出数据的分类 从它在世界上的地位 树——也就是说,它离树越近 根节点越重要


  • 从您的问题来看,在将训练数据提供给ML分类器之前,您似乎要完成两项任务

    I.识别合理的类别标签

    你想要预测的是一个日期。除非您的解析要求异常严格(例如,解析为单个日期),否则我将构建分类模型(返回给定数据点的类标签),而不是回归模型(返回单个连续值)


    假设您的响应变量是一个日期,一种简单的方法是将最早的日期设置为基线0,然后将所有其他日期表示为一个整数值,该整数值表示与该基线的距离。接下来,将所有日期离散为一小部分范围。一种非常简单的方法是计算响应变量的五个摘要描述性统计数据(最小值、第一个四分位数、平均值、第三个四分位数和最大值)。从这五个统计数据中,你可以得到四个明智选择的日期
    # suppose these are publication dates
    >>> pd0 = "04-09-2011"      
    >>> pd1 = "17-05-2010"
    # convert them to python datetime instances, e.g., 
    >>> pd0 = datetime.strptime(pd0, "%d-%m-%Y")
    # gather them in a python list and then call sort on that list:
    >>> pd_all = [pd0, pd1, pd2, pd3, ...]
    >>> pd_all.sort()
    # 'sort' will perform an in-place sort on the list of datetime objects,
    # such that the eariest date is at index 0, etc.
    # now the first item in that list is of course the earliest publication date
    >>> pd_all[0]
    datetime.datetime(2010, 5, 17, 0, 0)
    # express all dates except the earliest one as the absolute differenece in days
    # from that earliest date
    >>> td0 = pd_all[1] - pd_all[0]           # t0 is a timedelta object
    >>> td0
    datetime.timedelta(475)     
    # convert the time deltas to integers:
    >>> fnx = lambda v : int(str(v).split()[0])
    >>> time_deltas = [td0,....]
    # d is jsut a python list of integers representing number of days from a common baseline date
    >>> d = map(fnx, time_deltas)