文章目录
-
- Lesson-01-代码复现与参考答案
- 用历史数据来预测未曾见到的过的数据,最直接的方法
- K-Neighbor-Nearst
- 为了更快的获得结果,我们希望通过拟合函数来获得预测能力 f ( r m ) = k ∗ r m + b f(rm) = k * rm + b f(rm)=k∗rm+b
- Random Approach
- 蒙特卡洛模拟
- Supervisor
- Supervised Learning
- 我们把房价的预测 变成更加负责,精细的模型,该怎么做?
- 我们可以通过简单的、基本的模块,经过反复的叠加,来实现更加复杂的函数
- 1. 什么是机器学习?
- 2. KNN这种方法的缺陷,提出线性拟合的背景是什么
- 3. 怎么样通过监督的方法,来获得更快的函数权值更新
- 4. 非线性函数和线性函数的结合,可以拟合出非常复杂的函数
- 5. 深度学习我们可以通过基本的函数模块,来拟合更加复杂的函数
- Assigment:
- 将课堂代码中的L2-Loss 变成L1Loss 并且实现梯度下降
- 1 导入包
- 2 加载数据集
- 3 数据预处理
- 模型训练与梯度更新
Lesson-01-代码复现与参考答案
# 导入包
# 用于加载波士顿房价数据集
from sklearn.datasets import load_boston
# pandas工具包 对于pandas陌生的同学可以参考官方10分钟上手教程:https://pandas.pydata.org/pandas-docs/stable/10min.html
import pandas as pd
# seaborn 用于画图
import seaborn as sns
import numpy as np # numpy
# 显示画图
%matplotlib inline
data = load_boston() # 加载数据集
data.keys() # data的里面的字段
dict_keys([‘data’, ‘target’, ‘feature_names’, ‘DESCR’, ‘filename’])
dataframe = pd.DataFrame(data['data'])
dataframe.head(5) # 查看dataframe的前5行,我们可以看到列名是数字
dataframe.columns = data['feature_names'] # 将数字列名替换为特征的名字
dataframe.head(5)
dataframe['price'] = data['target'] # target为房价,也是我们的目标值,我们将目标值赋值给dataframe
dataframe.head(2)
sns.heatmap(dataframe.corr(), annot=True, fmt='.1f') # 查看特征与price的相关性系数,正相关和负相关
import matplotlib.pyplot as plt
plt.scatter(dataframe['RM'], dataframe['price'])
# 查看部分特征与price的数据分布展示
plt.figure(figsize=(20, 5))
features = ['LSTAT', 'RM']
target = dataframe['price']
for i, col in enumerate(features):
plt.subplot(1, len(features) , i+1)
x = dataframe[col]
y = target
plt.scatter(x, y, marker='o')
plt.title('{} vs price'.format(col))
plt.xlabel(col)
plt.ylabel('price')
np.subplot用来 使得图一行放两个
x = dataframe['RM']
y = dataframe['price']
history_notes = {_x : _y for _x, _y in zip(x, y)}
用历史数据来预测未曾见到的过的数据,最直接的方法
K-Neighbor-Nearst
def knn(query_x, history, top_n=3):
sorted_notes = sorted(history.items(), key=lambda x_y: (x_y[0] - query_x) ** 2)
similar_notes = sorted_notes[:top_n]
similar_ys = [y for _, y in similar_notes]
return np.mean(similar_ys)
knn(5.4, history_notes)
15.700000000000001
为了更快的获得结果,我们希望通过拟合函数来获得预测能力 f ( r m ) = k ∗ r m + b f(rm) = k * rm + b f(rm)=k∗rm+b
Random Approach
L o s s ( k , b ) = 1 n ∑ i ∈ N ( y i ^ − y i ) 2 Loss(k, b) = \frac{1}{n} \sum_{i \in N} (\hat{y_i} - y_i) ^ 2 Loss(k,b)=n1i∈N∑(yi^−yi)2
L o s s ( k , b ) = 1 n ∑ i ∈ N ( ( k ∗ r m i + b ) − y i ) 2 Loss(k, b) = \frac{1}{n} \sum_{i \in N} ((k * rm_i + b) - y_i) ^ 2 Loss(k,b)=n1