机器学习Day05(上)

1. 迭代法

适合场景:

  • 不能一次搞定的问题
  • 分成很多步来逐步解决

KMeans 聚类算法

Linear / Logistic Regression 线性回归、逻辑回归

三个关键点:

  • 1. 随机的开始(random, rough start)
    • 随机 = 普适
  • 2. 逐步变好的策略(optimize)
    • step by step
    • 每天进步一天天
    • 相信累积,相信长期主义
  • 3. 退出条件(stop)
    • 固定步数
    • 误差限制

KMeans 算法:

  • 使用最多、最简单易用的聚类算法。
  • clustering聚类
  • 本质:无标签的分类
  • 没有标签,只有特征
  • 只根据特征来进行分类
  • 原来没有类别,需要你根据业务需要将样本分成几类
  • 思想:物以类聚,人以群分
    • 挨得近的看作一类,挨得远的看作另一类
  • KMeans内涵:
    • K:代表分类数量,K个类
    • Means:
      • Mean 均值
      • s 多次,复数 
  • 迭代式算法跟随机的出生点是有关系的,存在一个小概率的不稳定
from sklearn.datasets import make_blobs
from matplotlib import pyplot as plt

# Generate isotropic Gaussian blobs for clustering
X, y = make_blobs(n_samples=1000, 
                  n_features=2, 
                  centers=4,
                 cluster_std=0.5,
                 random_state=0)

plt.scatter(x=X[:,0],y=X[:,1],c=y)
"""
分成4类
不管是有监督,还是无监督学习,sklearn api高度一致
"""
from sklearn.cluster import KMeans
#实例化对象
km = KMeans(n_clusters=4)
# 训练模型
km.fit(X=X,y=y)
km.cluster_centers_
plt.scatter(x=X[:,0],y=X[:,1],c=y)
plt.scatter(x=km.cluster_centers_[:,0],
            y=km.cluster_centers_[:,1],
            c="red",
            marker="*")

 

在数据科学中,生成假数据fake data是一种重要的能力。

线性回归

  • Linear
    • 自变量和因变量都是一次方关系
    • 因变量是自变量的线性组合
      • 把每个自变量都乘上一个系数(权重),再加在一起
        • weight w
        • 乘到变量上,代表该变量的重要程度
        • 有多少个变量,就有多少个权重
      • 最后再加上一个公共的常量(偏置)
        • bias b
        • 加到最终结果上
        • 有多少个最终的结果,就有多少个偏置
    • y = wx + b
    • y = kx + b
    • f(x,y) = k1x + k2y + b
  • Regression
    • 预测连续型数据
  • 房价预测:
    • 线性回归:
      • 假定:房价是由特征们的线性组合得到的
  • 算法流程:
    • 1. 随机初始化:w 和 b
      • f = w1x1 + w2x2 +...w13x13 + b
      • x和y是数据集里的,在这里w和b是变量,x和y是常量
    • 2. 从训练集中,取出一批样本batch_X, batch_y
      • 把特征batch_X代入模型,得到一个预测结果y_pred
        • 此时,y_pred是w和b的函数
      • 衡量预测结果和真实结果的误差
        • loss = loss_fn(y_pred, batch_y)
        • 预测的越差,误差越大;预测的越好,误差就越小;
        • loss是y_pred的函数,y_pred又是w和b的函数
        • loss是w和b的函数
        • 误差的大小是受w和b的影响
      • 模型变好,就是误差变小
        • 数学问题:求函数的最 / 极小值
        • 当w和b是多少的时候,loss可以取得最小值
      • 综上所述,模型优化的问题,就变成了一个函数求最小值的过程。

如何求函数的最小值?

  • 求y = F(x) 的最小值?
  • 理论数学:
    • 求导数 / 偏导
    • 令导数/ 偏导等于零
    • 解方程/组,得到疑似结果,再做进一步结果验证
  • 样本不在模型上,在模型周围,所以这个理论数学在工程上是不可行的,我们需要用别的方法解决

工程上:

  • 迭代法
  • (随机)梯度下降法 SGD (Stochastic Gradient Descent)
import numpy as np
from matplotlib import pyplot as plt

def fn(x):
    """
        定义函数
    """
    return x ** 2

x = np.linspace(start=-5, stop=5, num=100)

"""
    绘制图形
"""
plt.plot(x, fn(x))
plt.grid()



def dfn(x):
    """
        求导函数
    """
    return 2 * x

# 走一个固定的步数
steps = 1000
# 把步子压得小一点
learning_rate = 1e-2

# 1,随机的开始
x = np.random.randint(low=-1000, high=1001, size=(1,))
print(f"x的初始值: {x}")
# 2,迭代优化
for step in range(steps):
    # 梯度下降法
    x = x - learning_rate * dfn(x)
    print(f"优化{step+1}步后, x的值: {x}")
print(f"x的最终值: {x}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值