sklearn学习笔记(持续更新中,收藏不迷路)

目录

KNN Api

一、k-近邻算法Api

二、K值选择

三、Kd树构造

1.构造

2.搜索

线性回归API

回归方程:

例:

求导公式:(自己复习)

线性回归损失与优化

总损失:(最小二乘法)

优化:

1.正规方程

推导过程:

2.梯度下降

迭代公式:

单变量函数

例子:

多变量函数

例子:

正规方程与梯度下降比较

梯度下降法详解

1.全梯度下降法(FG)

2.随机梯度下降法(SG)

3.小批量梯度下降法(mini-batch)

4.随机平均梯度下降法(SAG)

回归性能评估

均方误差:

正规方程与梯度下降法示例

1.正规方程演示

2.梯度下降法演示

欠拟合/过拟合解决方法

欠拟合

过拟合

正则化

正则化的方式——岭回归(RidgeRegression)

lasso回归

弹性网络

岭回归示例

距离公式

一、欧氏距离

二、曼哈顿距离

三、切比雪夫距离

四、闵可夫斯基距离

五、标准化的欧氏距离

六、余弦距离

案例


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

回归方程:

h(w) = w_{1}x_{1} + w_{2}x_{2}+...+b = W^TX+b

W =\bigl(\begin{smallmatrix} w_{1} \\ w_{2} \\ ... \\ w_{n} \end{smallmatrix}\bigr)     X =\bigl(\begin{smallmatrix} X_{1} \\ X_{2} \\ ... \\ X_{n} \end{smallmatrix}\bigr)

例:

from sklearn.Linear_model import LinearRegression
x = [[],[]] # 特征值 ,略
y = [] # 目标值 ,略

# 训练模型
# 1.实例化估计器
estimator = LinearRegression()
# 2.调用fit训练
estimator.fit(x,y)

# 3.查看系数
coef = estimator.coef_

# 4.预测结果
estimator.predict([[],[]]) # 输入测试特征值

求导公式:(自己复习)

线性回归损失与优化

总损失:(最小二乘法)

J(\theta ) = (h_{w}(x_{1})-y_{1})^2 + (h_{w}(x_{2})-y_{2})^2+....+(h_{w}(x_{m})-y_{m})^2 \\=\sum_{i=1}^{m} (h_{w}(x_{i})-y_{i})^2 \\= (Y-XW)^2

h_{w}(x_{i}) :预测值

y_i :实际值

优化:

1.正规方程

W=(X^T X)^{-1}X^TY

X   特征值矩阵

X^T 转置

X^{-1}逆矩阵
Y 目标值矩阵

推导过程:

J(\theta )= (Y-XW)^2的导数为0 

{((Y-XW)^2)}' = 0 \\ 2(Y-XW)X = 0 \\ (Y-XW)X = 0 \\Y-XW = 0 \\XW = Y \\X^TXW =X^TY \\(X^TX)^{-1}X^TXW =(X^TX)^{-1}X^TY \: \because X^TX)^{-1}X^TX =1 \\\therefore W =(X^TX)^{-1}X^TY

2.梯度下降
迭代公式:

迭代公式 = 初始点 -  学习率 * 在这一点的导数

单变量函数

单变量函数中,梯度即函数的微分(导数),代表给定点的切线的斜率

例子:

y=x^2

{y}'=2x

初始点:x^0 = 1

学习率:\alpha =0.4

迭代公式计算:

x^0 = 1

x^1 = x^0 - \alpha \cdot {y}' = 1 - 0.4 * 2 =0.2

x^2 = x^1 - \alpha \cdot {y}' = 0.2 - 0.4 * 0.4 =0.04

...

多变量函数

多变量函数中梯度是一个向量,向量有方向,梯度的方向就是函数在给定点的上升最快方向的反方向

例子:

y(x) = x_1^2+ x_2^2

{y(x)}' = \Delta y = <2x_1,2x_2>

初始点:x^0 = (1,3)

学习率:\alpha =0.4

迭代公式计算:

x^0 = (1,3)

x^1 = x^0 - \alpha \cdot {y}' = (1,3) - 0.1 * (2,6) =(0.8,2.4)

x^2 = x^1 - \alpha \cdot {y}' = (0.8,2.4)- 0.1 * (1.6,4.8)=(0.64,1.92)

......

正规方程与梯度下降比较
梯度下降正规方程
指定学习率不需要学习率
迭代求解一次计算得出
特征值很多的时候推荐特征值少使用

梯度下降法详解

1.全梯度下降法(FG)

用全体数据进行计算。速度慢,耗内存

2.随机梯度下降法(SG)

训练比较好,但需要谨慎选择步长

3.小批量梯度下降法(mini-batch)

4.随机平均梯度下降法(SAG)

训练初期不佳,优化慢。慢慢会越变越好

回归性能评估

均方误差:

MSE = \frac{1}{m}\sum_{i=1}^{m}(y_{i}-\bar{y_{i}})^2

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)

线性回归的正则化版本

正则项:\alpha \sum_{i=1}^{n}\theta_i ^2

岭回归的代价函数:

J(\theta )=MSE(\theta_i ) + \alpha \sum_{i=1}^{n}\theta_i ^2

即:

J(\theta )=\frac{1}{m}MSE( \theta ^T\cdot x_{(i)} -y_{(i)})^2 + \alpha \sum_{i=1}^{n}\theta_i ^2

lasso回归

J(\theta )=MSE(\theta_i ) + \alpha \sum_{i=1}^{n}|\theta_i|

弹性网络

J(\theta )=MSE(\theta_i ) + r\cdot \alpha \sum_{i=1}^{n}|\theta_i| + \frac{1-r}{2}\alpha \sum_{i=1}^{n}\theta_i^2

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)

距离公式

一、欧氏距离

二维点a(x_1,y_1),b(x_2,y_2)

d = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2}

多维点a(x_1,x_2,...),b(y_1,y_2,...)

d = \sum\sqrt{(x_i-y_i)^2}

二、曼哈顿距离

二维点a(x_1,y_1),b(x_2,y_2)

d = \mid x_1-x_2 \mid+\mid y_1-y_2 \mid

多维点a(x_1,x_2,...),b(y_1,y_2,...)

d = \sum\mid x_i-y_i \mid

三、切比雪夫距离

二维点a(x_1,y_1),b(x_2,y_2)

d = max(\mid x_1-x_2 \mid,\mid y_1-y_2 \mid)

多维点a(x_1,x_2,...),b(y_1,y_2,...)

d = max\mid (x_i-y_i) \mid

四、闵可夫斯基距离

d = \sqrt[p]{\sum |x_i-y_i|^p}

p = 1 曼哈顿距离

P = 2 欧氏距离

P = ∞ 切比雪夫距离

五、标准化的欧氏距离

例:(180,50),(180,60),(190,50) 分别为身高和体重,单位不统一,计算欧氏距离无意义

标准化变量

\boxed{\ X^* =\frac {X-m}{S_k}}

m:均值

S:标准差

标准化后的距离:

d = \sqrt{\sum (\frac {x_i-y_i} {S_k})^2}

六、余弦距离

二维点a(x_1,y_1),b(x_2,y_2)

d = \frac {x_1*x_2 + y_1*y_2} {\sqrt{x_1^2+y_1^2} * \sqrt{x_2^2+y_2^2}}

多维点a(x_1,x_2,...),b(y_1,y_2,...)

d = \frac {a*b} {|a||b|}

案例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值