【机器学习】周志华 读书笔记 第三章 线性模型

1. 基本形式

f(?) = ω1 X1 + ω2 X2 十...+ωdXd + b ,

2.线性回归

均方误差有非常好的几何意义--它对应了常用的欧几里得距离或简称"欧

氏距离" (Euclidean distance). 基于均方误差最小化来进行模型求解的方法称为"最小二乘法" (least squ町e method). 在线性回归中,最小A乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小.

3.对数几率回归

若将y视为样本x 作为正例的可能性,则1-y 是其反例可能性,两者的比值

称为"几率" (odds) ,反映了m 作为正例的相对可能性.对几率取对数则得到

"对数几率" (log odds ,亦称logit)

因此,其对应的模型称为"对数几率回归" (logistic regression)特别需注意到,虽然它的名字是"回归",但实际却是一种分类学习方法.这种方法有很多优点,例如它是直接对分类可能性进行建模,无需事先假设数据分布?这样就避免了假设分布不准确所带来的问题;它不是仅预测出"类别",而是可得到近似概率预测,这对许多需利用概率辅助决策的任务很有用;此外,对率函数是任意阶可导的凸函数,有很好的数学性质,现有的许多数值优化算法都可直接用于求取最优解.

4.对数几率回归训练方式?

我们知道,对数几率回归函数的输出值是一个概率。那么一个对率回归模型越好,意味着当输入模型的样本为正例时,模型的输出值越大(越接1)当输入模型的样本为反例时,模型的输出值越小(越接近0)。因此我们可以构建一个函数

上式中hθx是对率模型的输出值,yi是样本的真实标记,当样本为正例时y取1,为反例时y取0。这整一个函数的含义就是把每个样本属于其真实标记的概率加起来。若我们使l(θ)最大,那就可以找到一组θ使得每个样本属于其真实标记的概率最大,亦即使得正例的函数值尽可能接近1,反例的函数值尽可能接近0。如此我们就得到了一个优秀的对数几率回归模型。

5.线性判别分析

线性判别分析(Linear Discriminant Analysis,简称LDA) 是一种经典的线性学习方法.

LDA 的思想非常朴素: 给定训练样例集, 设法将样例投影到一条直线上,

使得同类样例的投影点尽可能接近、异类样例的投影点尽可能远离;在对新样

本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别. 图3.3 给出了一个二维示意图.

  1. 多分类学习

解决思路一般有一对一,一对多,和多对多三种。

一对一策略:举个例子,现在有A、B、C、D四个种类,要确定某个样本属于四类中的哪一类。那么我们可以事先训练好六个二分类的分类器——A/B、A/C、A/D、B/C、B/D、C/D。然后把要确定类别的样本分别放入这六个分类器。假设分类结果分别是A、A、A、B、D、C。可以知道六个分类器中有三个认为这个样本术语A,认为是B、C、D的各有一个。所以我们可以认为这个样本就是术语A类的。

一对多策略:举个例子,现在有A、B、C、D四个种类,要确定某个样本属于四类中的哪一类。那么我们可以事先训练好四个二分类的分类器——A/BCD、B/ACD、C/ABD、D/ABC,分类器输出的是一个函数值。然后把要确定类别的样本分别放入这四个分类器。假设四个分类器的结果分别是“属于A的概率是0.9”,“属于B的概率是0.8”、“属于C的概率是0.7”、“属于B的概率是0.6”。那我们可以认为这个样本是属于A。

多对多策略:每次将若干个类作为正类,若干个其他类作为反类。其中需要这种策略需要特殊的设计,不能随意取。常用的技术:纠错输出码。工作步骤分为:

  • 编码:对N个类别做M次划分,每次划分将一部分类别作为正类,一部分划分为反类,从而形成一个二分类训练集;这样一共产生M个训练集,可以训练出M个分类器。
  • 解码:M个分类器分别对测试样本进行预测,这些预测标记组成一个编码,将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别最为最终预测结果。

以原书的例子做一个详细的演示:

假如现在有一个训练数据集,可以分四个类——C1, C2, C3, C4

再具体一点可以想像为——西瓜可以分为一等瓜、二等瓜、三等瓜、四等瓜,要训练一个分类系统,使之能判断一个西瓜的等级。

我们对训练数据集做五次划分

  • 第一次,标记C2为正例,其他为反例,训练出一个二分类的分类器f1
  • 第二次,标记C1、C3为正例,其他为反例,训练出一个二分类的分类器f2
  • 第三次,标记C3、C4为正例,其他为反例,训练出一个二分类的分类器f3
  • 第四次,标记C1、C2、C4为正例,其他为反例,训练出一个二分类的分类器f4
  • 第五次,标记C1、C4为正例,其他为反例,训练出一个二分类的分类器f5

根据这五次划分的过程,每一个类都获得了一个编码(向量):

  • C1:(-1,1,-1,1,1)
  • C2:(1,-1,-1,1,-1)
  • C3:(-1,1,1,-1,1)
  • C4:(-1,-1,1,1,-1)

若现在有一个测试样本,五个分类器对应的累计结果为

f1:反, f2:反, f3:正, f4:反, f5:正

即该测试样本对应的编码/向量为(-1,-1,1,-1,1)

那么分别计算这个测试样本的编码与四个类别的编码的向量距离,可以使用欧氏距离,算的与C3类的距离是最小的。因此判定该测试样本属于C3类。

补充

Gradient Descent for Multiple Variables

The gradient descent equation itself is generally the same form; we just have to repeat it for our ‘n‘ f

eatures:

Programming Example ---simple linear regression predicting house price

# -*- coding: utf-8 -*-
"""
Created on Thu Apr 26 10:15:38 2018

_author: wangchen
_email: [email protected]
_Anhui Jianzhu University
"""

#!/usr/bin/env python
# encoding: utf-8

# Required Packages
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model

def get_data():
    """
    生成随机的线性数据集
    :return:
    """
    x = 100 * np.random.rand(100, 1).astype(np.float32)
    y = 2 * x + 10  # 直线
    # y = 7 * x ** 5 + 3 * x + 10  # 曲线
    y += 50 * np.random.rand(100, 1).astype(np.float32)
    return x, y

# Function for Fitting our data to Linear model
def linear_model_main(X_parameters, Y_parameters, predict_value):
    # Create linear regression object
    regr = linear_model.LinearRegression()
    regr.fit(X_parameters, Y_parameters)
    predict_outcome = regr.predict(predict_value)

    predictions = {}
    predictions[‘intercept‘] = regr.intercept_
    predictions[‘coefficient‘] = regr.coef_
    predictions[‘predicted_value‘] = predict_outcome
    return predictions

# Function to show the resutls of linear fit model
def show_linear_line(X_parameters, Y_parameters, predictvalue):
    # Create linear regression object
    regr = linear_model.LinearRegression()
    regr.fit(X_parameters, Y_parameters)

    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    # 设置标题
    ax1.set_title(‘Housing Forecast‘)

    ax1.scatter(X_parameters, Y_parameters, color=‘blue‘, marker=‘*‘)
    ax1.plot(X_parameters, regr.predict(X_parameters), color=‘c‘, linewidth=1)

    # 画点
    ax1.scatter(predictvalue, regr.predict(predictvalue), color=‘red‘)

    # 画水平虚线
    plt.axvline(x=predictvalue, ls=‘dotted‘, color=‘y‘)
    plt.axhline(y=regr.predict(predictvalue), ls=‘dotted‘, color=‘y‘)

    plt.xlabel(‘x:area‘)
    plt.ylabel(‘y:price‘)

    plt.show()

if __name__ == "__main__":
    X, Y = get_data()
    predictvalue = 90  # 面积
    result = linear_model_main(X, Y, predictvalue)

    print("Intercept value ", result[‘intercept‘])
    print("coefficient", result[‘coefficient‘])
    print("Predicted value: ", result[‘predicted_value‘])
    print("面积 %d 的价格预测为 %d" % (predictvalue, result[‘predicted_value‘]))

    show_linear_line(X, Y, predictvalue)

Output

Intercept value [ 34.93412135]
coefficient [[ 2.02093196]]
Predicted value: [[ 216.81799767]]
面积 90 的价格预测为 216

?

原文地址:https://www.cnblogs.com/cswangchen/p/8949798.html

时间: 2024-08-03 23:21:57

【机器学习】周志华 读书笔记 第三章 线性模型的相关文章

MySQL Cookbook读书笔记第三章

1,查询指定列/从指定列中查询 若需要指定每一列在查询结果中出现的先后顺序,可以在select语句中指定(dstuser在dsthost之后): 查询显示用户所关注的列: 2,指定查询行 使用where关键字可以查询符合条件限制的数据例如:查找srchost为venus或者srchost以s开头的行记录: 使用操作符like进行模式匹配,其中%表示通配符,代表一个差多为任意值的字符串. where使用操作符and可以查询多个条件: 条件并集: 3,格式化显示查询结果 当查询语句中没有重命名列名,

Linux内核设计与实现读书笔记——第三章

Linux内核设计与实现读书笔记——第三章 进程管理 20135111李光豫 3.1进程 1.进程即处于执行期的程序,并不局限于一个可执行的代码,是处于执行期程序以及其相关资源的总称. 2.Linux系统中,对于进程和线程并没有明显的区分,线程是一种特殊的进程. 3.Linux系统中,常用fork()进程创建子进程.调用fork()进程的成之为其子进程的父进程. 4.fork()继承实际上由clone()系统调用实现.最后通过exit()退出执行. 3.2任务描述符及任务结构 1.任务队列实质上

Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧

Android群英传神兵利器读书笔记--第三章:Android Studio奇技淫巧 这篇文章篇幅较长,可以使用版权声明下面的目录,找到感兴趣的进行阅读 目录 3.1 Android Studio使用初探 Project面板 Stucture面板 Android Monitor Keymap Tip of the Day 快速查找 Search Action 演示模式 3.2 Android Studio使用进阶 操作与导航 快速重构 代码模板 内置模板 自定义代码注释模板 代码分析 在Andr

【读书笔记】机器学习-周志华 & 机器学习实战(Python)

这两本放在一起看吧.当然了,我觉得Spark上面的实践其实是非常棒的.有另一个系列文章讨论了Spark. /Users/baidu/Documents/Data/Interview/机器学习-数据挖掘/<机器学习_周志华.pdf> 一共442页.能不能这个周末先囫囵吞枣看完呢.哈哈哈. P1 一般用模型指全局性结果(例如决策树),用模式指局部性结果(例如一条规则). P3 如果预测的是离散值,那就是分类-classification:如果预测的是连续值,那就叫回归-regression. P3

机器学习-周志华

机器学习的一些小tips周志华Tom M.Mitchell,是卡内基梅隆大学的教授,讲授“机器学习”等多门课程:美国人工智能协会(AAAL)的主席:美国<Machine Learning>杂志.国际机器学习年度会议(ICML)的创始人:多种技术杂志的撰稿人,曾发表过许多文章,出版过多本专著,是机器学习领域的著名学者. 本书展示了机器学习中核心的算法和理论,并阐明了算法的运行过程.本书综合了许多的研究成果,例如统计学.人工智能.哲学.信息论.生物学.认知科学.计算复杂性和控制论等,并以此来理解问

《java并发编程的艺术》读书笔记-第三章Java内存模型(二)

一概述 本文属于<java并发编程的艺术>读书笔记系列,第三章java内存模型第二部分. 二final的内存语义 final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.可以参照之前整理的关键字final.这里作者主要介绍final域的内存语义. 对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序. 初次读一个包含final域的对象的引用,与随后初次读这

&lt;java并发编程的艺术&gt;读书笔记-第三章java内存模型(一)

一概述 本文属于<java并发编程的艺术>读书笔记系列,继续第三章java内存模型. 二重排序 2.1数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性.数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之后,再读这个位置. 写后写 a = 1;a = 2; 写一个变量之后,再写这个变量. 读后写 a = b;b = 1; 读一个变量之后,再写这个变量. 上面三种情况,只要重排序两个操作的执行顺序,

Python读书笔记-第三章,四章

第三章 1. 字符串格式化 >>>format="hello %s  %s world" >>>values=('world','hot') >>>print format % values  #也可以接收单个字符串也 也可以用%f %d这类的类似与c的printf 匹配多个参数的时候应该用圆括号 >>>'%s plus %s equals %s'  %(1,1,2) >>>'%010.2f' %

读书笔记第三章

第三章linux下的软件有很多都不直接以二进制形式的安装包提供,而是直接提供了源代码,用户需先下载源代码,然后在本机上编译并安装(一般使用make.make install等命令).git是源代码管理软件.git使用步骤:安装git.查看git文档:用man方法就行.源代码的提交与获取:1创建版本库:git init,git的版本库与其他版本管理软件的版本库组织方式有很大差异,git的版本库分为本地版本库和远程版本库.建立项目之初,使用git init在本地常见一个空的版本库.2将文件提交到本地