机器学习概述 2021-10-16

人工智能基础总目录

机器学习概述

内容要点

  1. 什么是优化问题 optimization problem
  2. 动态规划 dynamic programming (coding)
  3. 梯度下降 gradient descent (coding)
  4. 什么是机器学习 machine learning
  5. 特征、模型和预测 feature、model、predicate
  6. 什么是向量距离 vector distance (coding)
  7. k-means聚类 (coding)
  8. 什么是监督性学习,无监督性学习。

一、从动态规划到机器学习

优化问题示例: 题目说明: 切木材的问题,木材长度与售价关系。木材可以切割来出售,给定木材长度,如何获取最大的收入。 在这里插入图片描述

from collections import defaultdict
from functools import lru_cache

# loading data
prices = [1, 5, 8, 9, 10, 17, 17, 20, 24, 30, 33]
length_to_price = defaultdict(int)

for i, p in enumerate(prices): length_to_price[i+1] = p


def revenue(n, cache={}, solution={}):
    if n in cache: return cache[n], solution[n]

    candidates = [ (length_to_price[n], (n, 0)) ]

    for s in range(1, n):
        split = ( revenue(s, cache, solution)[0] + revenue(n - s, cache, solution)[0], (s, n - s))
        candidates.append(split)
        # candidates.append(revenue(s, cache) + revenue(n - s, cache))

    optimal, optimal_split = max(candidates, key=lambda x: x[0])
    cache[n] = optimal

    solution[n] = optimal_split

    return optimal, solution


SOLUTION = {}


@lru_cache(maxsize=2**10)
def revenue_func_cache(n):
    candidates = [(length_to_price[n], (n, 0))]

    for s in range(1, n):
        split = (revenue(s) + revenue(n - s), (s, n - s))
        candidates.append(split)
        # candidates.append(revenue(s, cache) + revenue(n - s, cache))

    optimal, optimal_split = max(candidates, key=lambda x: x[0])

    global SOLUTION
    SOLUTION[n] = optimal_split

    return optimal


def parse_solution(n, solution):
    left, right = solution[n]

    if left == 0 or right == 0: return [left, right]
    else:
        return parse_solution(left, solution) + parse_solution(right, solution)


r, s = revenue(118)

print(s)
print(r)

print(parse_solution(118, s))
print(parse_solution(8, s))

1.1 动态规划的要点

  1. 识别子问题 sub-problems dividing
  2. 识别子问题中的重叠特点 over-lapping sub-problem
  3. 存储子问题的答案 cache sub-solutions
  4. 合并问题答案 combine solutions
  5. 解析答案 parse solutions

二、机器学习

当出现下面的情况时,动态规划难以胜任。

  • 限制条件极其多(成千上万)
  • 问题分解及其复杂(难以识别子问题)
  • 子问题插解教多(时间复杂度太多)

数据采用向量来表示,输入用向量,如果输出向量,是一个数字,该问题是Regression回归问题; 是 0-1 二分类(Binary Classification)问题,是多个值 与概率相关,称为多分类(Multiclass Classification)问题。

机器学习,我们将实际问题变成函数输入,机器能够找到一些关键参数,甚至函数的结构都可以找到。

2.1 机器学习通用框架。

在这里插入图片描述
监督学习:训练的时候有结果
非监督学习:训练的时候没有结果y, 根据数据的规律来处理。

2.2 监督学习举例

  • 梯度下降: 梯度就是分别对每个变量进行微分,在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向。
  • 损失函数: 用梯度下降的方法求损失函数的最小值。

代码示例: 求最小值的问题的代码实现, 对loss 函数求最小值,初始位置(10, 0.35),求出w 使得loss 函数最小。梯度下降求最值。

  • Loss 函数的意义: 误差,真实值与预估值之间的差距,使用平方来表示,跟绝对值相比,差距越大的数值越大。
  • 代码含义说明: 随机初始化一个w和b, 根据模型wx+b 得到预估值, 预估值与真实值计算出Loss, 然后用梯度下降的方法更新 w b,直到loss 满足条件。 由于当前只有一个观测数据,所以只求解了w。
import random
from icecream import ic


def loss(x, w, b, ys):
    return ((w * x + b) - ys) ** 2

# 更新谁计算谁的梯度
def gradient(x, w, b, y):
    # 对Loss 函数对w求偏导(梯度)
    return 2 * (w * x + b - y) * x


w, b = random.randint(-10, 10), random.randint(-10, 10)
ic(w, b)
# 初始位置
x, y = 10, 0.35
# 设置微小变化量的大小
lr = 1e-3
for i in range(200):
    x = x + -1 * gradient(x, w, b, y) * lr
    ic(x)
    ic(loss(x, w, b, y))

2.3 非监督学习举例

实际的问题:淘宝国际上经常有境外人员从国外销售违禁违法物品,国家要求这些东西全部下架,但是这些人员会更换物品的名字。例如枪支:狗子,如何识别这些暗语。

近朱者赤,近墨者黑。
在这里插入图片描述

代码实践案例

1 为中国省会设置能源中心

2 新闻自动进行归类
使用k-means 对新闻进行文本聚类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值