【机器学习】(西瓜书)第1章 绪论 & 第2章 模型评估与选择

本文介绍了机器学习的基本概念,包括监督学习和无监督学习,以及模型训练、测试和泛化能力。讨论了归纳偏好、版本空间和假设空间在学习过程中的作用,并举例说明了归纳偏好的重要性。最后,提到了模型评估和选择的重要性,以及没有免费的午餐定理。

一、 绪论

1. 什么是机器学习(Machine Learning)?

致力于研究如何通过计算的手段,利用数据(经验)来改善系统自身的性能。

主要研究内容:是关于在计算机上从数据中产生“模型”(model)的算法,即“学习算法”(learning algorithm)——将经验数据提供给学习算法,学习算法就能基于数据产生模型;在面对新的情况时,模型会给我们提供相应的判断。(模型泛指数据中学到的结果。)

2. 基本术语

data set: 数据集,数据记录的集合。

 

sample(or instance): 样本,每条数据记录(关于对象或事件的描述)。

feature(or attribute): 特征,事件或对象的性质。

attribute value: 属性值。

sample space(or attribute space): 属性空间,样本空间,或者为输入空间。

feature vector: 特征向量。将对象或事件的性质features作为坐标轴,假设西瓜的三个属性为三个坐标轴,生成三维空间,则每个西瓜都能在这个空间中找到一个坐标点。而在该空间中,每个点就是一个特征向量。

从数据中执行某个学习算法学得模型的过程称为“学习(learning)”或“训练(training)”。

training data: 训练数据,即训练过程中使用的数据。

training sample: 训练样本,即训练数据中的每个样本。

training set: 训练集,即训练样本组成的集合。

hypothesis: 假设,学得模型对应了关于数据的某种潜在的规律。

为了使得模型具有判断预测(prediction)的好坏,还

可以找到部分节的课后习题答案。第一绪论的答案是,由于好瓜的3个属性值坏瓜都不同,所以能训练集一致的假设就有很多可能了,从最具体的入手,往上逐层抽象可得,从一般到特殊或是从特殊到一般对整个假设空间进行搜索,删除正例1不一致的假设,或反例4一致的假设,最终得到版本空间 [^1]。 第二模型评估选择有一道课后习题的解答。数据集包含1000个样本,其中500个正例,500个反例,将其划分为包含70%样本的训练集和30%样本的测试集用于留出法评估,需要从正负样本中各筛选出500 * 30% = 150的样本,但文档未给出划分方式总数的具体计算结果 [^3]。 第三涉及反证法和牛顿迭代法相关内容。反证法指出当b = 0,x = 1,就是sigmoid函数,显然非凸,中二阶导>0;还给出了牛顿迭代法的代码示例: ```python import numpy as np import pandas as pd Set = pd.read_csv("data.csv") # 数据集 X = np.array(Set[['密度','含糖率']]) # 标签 Y = np.where(np.array(Set[['好瓜']])=='是',1,0) N,Dy = Y.shape X = np.append(X,np.ones(N).reshape(N,1),axis=1) _,Dx = X.shape X=X.T Y=Y.T Beta = np.random.random(size=(Dx,1)) T = 10 for t in range(T): p1=np.exp(Beta.T@X)/(1+np.exp(Beta.T@X)) f1=(-np.sum(X*(Y-p1),axis=1)).reshape(3,1) f2=(X*p1*(1-p1))@X.T Beta = Beta - np.linalg.inv(f2)@f1 print('t:',t) print('Beta:',Beta) print('p1:',p1) # 可视化 import matplotlib.pyplot as plt plt.scatter(X[0], X[1], s=10, marker='o') plt.xlabel('x0') plt.ylabel('x1') plt.title('Title') for i in range(N): plt.text(X[0][i], X[1][i], "{},{:.3f}".format(Y[0][i],p1[0][i])) x=np.array([0.2,0.9]) a = -Beta[0][0]/Beta[1][0] # 直线斜率 b = -Beta[2][0]/Beta[1][0] # 直线截距 y_line = a * x + b # 直线方程 plt.plot(x, y_line, 'r--') plt.show() ``` 该代码用于解决第三相关课后习题 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值