目录
KNN Api
一、k-近邻算法Api
from sklearn.neighbors import KNeighborsClassifier
# 定义一个二维数组
X = [[1],[2],[0],[0]]
# 定义二维数组的标签
Y = [1,1,0,0]
# 1.实例化并设定k值
estimator = KneighborsClassifier(n_neighbors = k)
# 2.调用fit函数来训练
estimator.fit(x,y)
# 3.输入一个二维数组预测
estimator.predict([[5]])
二、K值选择
k过小:异常值会产生影响,出现过拟合问题,对训练数据集拟合度较高,对测试数据集误差较大
k过大:出现样本均衡问题,出现欠拟合问题(比如一个班级40人,30男,10女,如果k=40,进行模型训练来判断是男是女,所有的预测值都会是男)
三、Kd树构造
1.构造
选择维度:选择方差较大的那一维开始去切
数据划分:按照中位数划分
2.搜索
最近领域搜索
①不跨域
②跨域
线性回归API
回归方程:
例:
from sklearn.Linear_model import LinearRegression
x = [[],[]] # 特征值 ,略
y = [] # 目标值 ,略
# 训练模型
# 1.实例化估计器
estimator = LinearRegression()
# 2.调用fit训练
estimator.fit(x,y)
# 3.查看系数
coef = estimator.coef_
# 4.预测结果
estimator.predict([[],[]]) # 输入测试特征值
求导公式:(自己复习)
线性回归损失与优化
总损失:(最小二乘法)
:预测值
:实际值
优化:
1.正规方程
特征值矩阵
转置
逆矩阵
目标值矩阵
推导过程:
令的导数为0
2.梯度下降
迭代公式:
迭代公式 = 初始点 - 学习率 * 在这一点的导数
单变量函数
单变量函数中,梯度即函数的微分(导数),代表给定点的切线的斜率
例子:
初始点:
学习率:
迭代公式计算:
...
多变量函数
多变量函数中梯度是一个向量,向量有方向,梯度的方向就是函数在给定点的上升最快方向的反方向
例子:
初始点:
学习率:
迭代公式计算:
......
正规方程与梯度下降比较
梯度下降 | 正规方程 |
指定学习率 | 不需要学习率 |
迭代求解 | 一次计算得出 |
特征值很多的时候推荐 | 特征值少使用 |
梯度下降法详解
1.全梯度下降法(FG)
用全体数据进行计算。速度慢,耗内存
2.随机梯度下降法(SG)
训练比较好,但需要谨慎选择步长
3.小批量梯度下降法(mini-batch)
4.随机平均梯度下降法(SAG)
训练初期不佳,优化慢。慢慢会越变越好
回归性能评估
均方误差:
sklearn.metrics.mean_squared_error(y_true,y_pre)
正规方程与梯度下降法示例
1.正规方程演示
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler
data = load_boston()
# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(data,train_size=0.8,random_state=22)
# 实例化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
# 实例化一个估计器
estimator = LinearRegression()
# 训练数据集
estimator.fit(x_train,y_train)
coef = estimator.coef_
# 预测值
y_pre = estimator.predict(x_test)
# 得分
score = estimator.score(x_test, y_test)
# 均方误差
ret = mean_squared_error(y_test,y_pre)
2.梯度下降法演示
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
from sklearn.linear_model import SGDRegressor
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler
data = load_boston
x_train, x_test,y_train,y_test = train_test_split(data,train_size=0.8,random_state=22)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
estimator = SGDRegressor()
estimator.fit(x_train,y_train)
coef = estimator.coef_
y_pre = estimator.predict(x_test)
score = estimator.score(x_test, y_test)
ret = mean_squared_error(y_test,y_pre)
欠拟合/过拟合解决方法
欠拟合
- 添加其他特征
- 添加多项式特征
过拟合
- 重新清洗数据
- 增大训练数据量
- 正则化
- 降低维度,减少维度
正则化
主要是降低高次的影响
L1:去掉告次
L2:降低高次的权重
正则化的方式——岭回归(RidgeRegression)
线性回归的正则化版本
正则项:
岭回归的代价函数:
即:
lasso回归
弹性网络
r = 0 —— 岭回归
r = 1 —— lasso回归
岭回归示例
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler
data = load_boston
x_train, x_test,y_train,y_test = train_test_split(data,train_size=0.8,random_state=22)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)
estimator = Ridge()
estimator.fit(x_train,y_train)
coef = estimator.coef_
y_pre = estimator.predict(x_test)
score = estimator.score(x_test, y_test)
ret = mean_squared_error(y_test,y_pre)
距离公式
一、欧氏距离
二维点
多维点
二、曼哈顿距离
二维点
多维点
三、切比雪夫距离
二维点
多维点
四、闵可夫斯基距离
p = 1 曼哈顿距离
P = 2 欧氏距离
P = ∞ 切比雪夫距离
五、标准化的欧氏距离
例:(180,50),(180,60),(190,50) 分别为身高和体重,单位不统一,计算欧氏距离无意义
标准化变量
m:均值
S:标准差
标准化后的距离:
六、余弦距离
二维点
多维点