课程笔记
-
监督学习: 根据已有的数据集,知道输入和输出结果之间的关系。根据这种已知的关系,训练得到一个最优的模型。也就是说,在监督学习中训练数据既有特征(feature)又有标签(label),通过训练,让机器可以自己找到特征和标签之间的联系,在面对只有特征没有标签的数据时,可以判断出标签。监督学习包括回归问题和分类问题 -
回归问题和分类问题的区别: 分类和回归的区别在于输出变量的类型:定量输出称为回归,或者说是连续变量预测;定性输出称为分类,或者说是离散变量预测。 举个例子:预测明天的气温是多少度,这是一个回归任务;预测明天是阴、晴还是雨,就是一个分类任务。 -
无监督学习: 我们不知道数据集中数据、特征之间的关系,而是要根据聚类或一定的模型得到数据之间的关系。可以这么说,比起监督学习,无监督学习更像是自学,让机器学会自己做事情,是没有标签(label)的。 通过使用sklearn生成符合自身需求的数据集 import numpy as np
import matplotlib.pyplot as plt
from sklearn.semi_supervised import LabelSpreading
from sklearn.datasets import make_circles
n_samples = 200
X, y = make_circles(n_samples=n_samples, shuffle=False)
outer, inner = 0, 1
labels = np.full(n_samples, -1.)
labels[0] = outer
labels[-1] = inner
label_spread = LabelSpreading(kernel='knn', alpha=0.8)
label_spread.fit(X, labels)
output_labels = label_spread.transduction_
plt.figure(figsize=(4, 4))
plt.subplot()
plt.scatter(X[labels == outer, 0], X[labels == outer, 1], color='navy',
marker='s', lw=0, label="outer labeled", s=10)
plt.scatter(X[labels == inner, 0], X[labels == inner, 1], color='c',
marker='s', lw=0, label='inner labeled', s=10)
plt.scatter(X[labels == -1, 0], X[labels == -1, 1], color='darkorange',
marker='.', label='unlabeled')
plt.legend(scatterpoints=1, shadow=False, loc='upper right')
plt.title("Raw data (2 classes=outer and inner)")
-
使用sklearn构建完整的机器学习项目流程,以boston项目为例
- 明确项目任务:房价为监督学习,回归问题,连续变量的预测
- 收集数据集并选择合适的特征
from sklearn import datasets
import pandas as np
boston = datasets.load_boston()
X = boston.data
y = boston.target
features = boston.feature_names
boston_data = pd.DataFrame(X,columns=features)
boston_data["Price"] = y
boston_data.head()
以上部分代码读取了数据,并对数据进行了简单的展示,我们可以认为输出y和输入数据x是一个线性关系 3. 选择度量模型性能的指标 from sklearn.metrics import mean_absolute_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
mean_absolute_error(y_true, y_pred)
结果为0.5
可在sklearn.metrics选取合适的误差函数 4. 选择具体的模型并进行训练以优化模型 假设X和Y之间存在线性关系,模型的具体形式为 𝑦? =𝑓(𝑤)=
w
T
x
w^Tx
wTx,关于线性模型可以使用最小二乘法解决 5. 评估模型的性能并调参 将训练结果与目标结果对比,计算精度
作业部分
-
对最小二乘法的解读 对与几何解释的理解: 线性模型构建的输入和输出的关系为y=wx,x可以是多维的向量(如在波士顿房价数据集中的平均房间数,一氧化氮浓度),y为房价,我们的目的是求出最佳的w,第一感觉最佳的w是能完全拟合这个数据集的输入和输出,使得所有的输入x都等得到输出y,但是数据集往往做不到这么精确。 也就是所有的y不一定能用x进行拟合,所以将y投影到x的列空间中计算最优w,将y的投影设为
y
^
\hat{y}
y^?,并且
y
^
=
w
^
x
\hat{y}=\hat{w} x
y^?=w^x ,由矩阵投影的性质有
X
T
(
Y
?
Y
^
)
=
0
X^T(Y-\hat{Y})=0
XT(Y?Y^)=0,即
X
T
(
Y
?
w
^
x
)
=
0
X^T(Y-\hat{w}x)=0
XT(Y?w^x)=0所以
w
=
(
X
T
X
)
?
1
X
T
Y
w=(X^TX)^{-1}X^TY
w=(XTX)?1XTY,此时求出的
w
^
\hat{w}
w^为最优解 -
极大似然估计和最小二乘法的关系: 其实不太理解对于噪声假设为什么可以视为正太分布 -
决策树和线性模型的区别:第一次接触决策树是在《统计学习基础》这本书,结合书中内容和视频中的内容列举一些区别: 区别1:决策树很明显的不是线性模型 区别2:决策树在选择性能指标的时候有信息增益,信息增益比,基尼系数 线性模型采用平方误差比较多 区别3:以为决策数不是线性模型,在使用上比线性模型效果更广 -
使用线性模型拟合数据集:
import numpy as np
import numpy.linalg as lg
data=np.array([
[1,2,3,4],
[2,4,5,6],
[1,2,4,6],
[1,4,2,6],
[4,2,1,3],
[2,4,1,3],
[3,3,1,4],
])
target=np.array([
[21],[33],[24],[29],[18],[21],[21]
])
xTx=data.transpose().dot(data)
result=lg.inv(xTx).dot(data.transpose()).dot(target)
print(result)
使用的方法为最小二乘法,数据集的输入
x
?
=
[
x
1
,
x
2
,
x
3
,
x
4
]
\vec{x}=[x_1,x_2,x_3,x_4]
x
=[x1?,x2?,x3?,x4?],设定输出y与输入x的线性关系为
y
=
2
?
x
1
+
2
?
x
2
+
2
?
x
3
+
2
?
x
4
]
y=2*x_1+2*x_2+2*x_3+2*x_4]
y=2?x1?+2?x2?+2?x3?+2?x4?],所以正确的目标参数为:
[
2
2
2
2
]
\begin{bmatrix} 2 \\ 2 \\ 2 \\ 2 \\ \end{bmatrix}
?????2222?????? 在输出结果target(y)中将数据在目标数据上下波动一定的范围,通过最小二乘法拟合数据,求出的参数为:
[
0.93983034
2.93825212
1.30755573
2.17390018
]
\begin{bmatrix} 0.93983034 \\ 2.93825212 \\ 1.30755573 \\ 2.17390018 \\ \end{bmatrix}
?????0.939830342.938252121.307555732.17390018?????? 通过拟合出来的结果和目标结果还是有一定相似性的
|