2. PCA&多项式回归&CV&岭回归&LASSO& 弹性网

PCA

作用:降维降低数据量,降低处理时间; 降噪功能

使用方法:

from sklearn.decomposition import PCA  # 引入PCA
pca = PCA(0.95)  # 根据比例算出pca降维量
pca.fit(x_train)  # 进行计算出降维量
pca.n_components_  # 降维后的量
x_train_reduction = pca.transform(x_train)   # 对数据降维处理
x_test_reduction = pca.transform(x_test)

# 降噪处理过程
X_reduction = pca.transform(X)  # 1. 先降维
X_restore = pca.inverse_transform(X_reduction) # 2. 再恢复维度

多项式回归

  • 线性回归:y = a*x + b
  • 多项式回归: y = a * x^2 + b*x + c
from sklearn.preprocessing import PolynomialFeatures   # 多回归线性参数设置
poly = PolynomialFeatures( degree=2 )  # 2次系数
poly.fit(x)
x2 = poly.transform(x)  # 对训练样本2次化

from sklearn.linear_model import LinearRegression  # 多项式回归仍然是线性回归
lin_reg = LinearRegression()
lin_reg.fit(x2, y)     # 对处理后的样本使用二次回归方程
y_predict = lin_reg.predict(x2)

lin_reg.coef_  # 回归方程的系数
lin_reg.intercept_  # 方程的截距

# 显示多项式的方程曲线
plt.scatter(x_row,y)
plt.plot(np.sort(x_row), y_predict[np.argsort(x_row)], color='r')
plt.show()
  • 对于degree参数的设置会影响矩阵的扩展
x = np.arange(1,11).reshape(-1,2)
x  # x have two columns x1, x2

poly2 = PolynomialFeatures(degree=2)
poly2.fit(x)
x2 = poly2.transform(x)  # after transform x2 add three columns
x2                       # x1**2 , x1*x2, x2**2

poly3 = PolynomialFeatures(degree=3)  # (x1 + x2) ^ 3
poly3.fit(x)
x3 = poly3.transform(x)  # x1**3,x2**3, x1*x2**2, x2*x1**2, x1**2,x2**2
x3                       # add 7 columns

管道连接多个方法

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

poly_reg = Pipeline([                         # 使用管道连接多个方法
    ('poly', PolynomialFeatures(degree=2)),
    ('std_scaler', StandardScaler()),
    ('lin_reg', LinearRegression())
])

poly_reg.fit(x, y)        # 直接对管道实例化后的对象训练和预测计算
y_predict = poly_reg.predict(x)
poly_reg.score(x_test)

过拟合和欠拟合

测试数据集的意义: 寻找测试数据集最佳的点,泛化能力最好的地方

学习曲线

交叉验证Cross Validation

CV验证,对训练数据集划分多个等块,分别取某一块为验证数据集,避免一块测试数据集的不准确,取验证数据集验证结果最好的一个。

留一法LOO—CV:将训练数据集分成m份,留一份训练

leave-one-out cross validation

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score   # 1.通过交叉验证方法验证

knn_clf = KNeighborsClassifier()
cross_val_score(knn_clf, x_train, y_train, cv=10)


from sklearn.model_selection import GridSearchCV   # 2. 使用网格搜索交叉验证
parame = [
    {
        'weights': ['distance'],
        'n_neighbors':[i for i in range(2,10)],
        'p':[i for i in range(1,6)]
    }
]
gridsearchcv = GridSearchCV(knn_clf, parame, verbose=1, cv=5)  # cv参数代表交叉验证的折数,
gridsearchcv.fit(x_train, y_train)
gridsearchcv.best_params_    # 使用交叉验证取得的最佳参数
gridsearchcv.best_score_    # 使用交叉验证取得的最佳结果

偏差bias & 方差variance

偏差:偏离目标值得位置

方差:离散的程度

模型误差:偏差+方差+不可避免的误差

偏差:

​ 对问题的假设不正确:非线性使用回归线性预测

​ 欠拟合:

​ 参数学习通常为高偏差,线性回归天生的高偏差,假设的影响很大

方差:

​ 过拟合:对模型过于复杂,如使用高阶方程模拟回归,degree过大

​ 非参数学习通常为高方差, KNN天生的高方差,不对数据进行假设

偏差和方差通常是矛盾的。低偏差高方差,低方差高偏差

机器学习主要问题来自于 方差

解决手段:

  1. 降低模型复杂度
  2. 降维降噪
  3. 增加样本数
  4. 使用验证集
  5. 模型的正则化

模型泛化:岭回归& lasso回归& 弹性网Elastic Net

多项式回归过拟合的情况,有一些系数会很大,模型正则化就是限制其不要太大

image

LASSO更倾向于直线,Ridge更倾向于曲线,

LASSO对应的theta有的为零,Selection Operator对应的特征无用

image

# Ridge ||y - Xw||^2_2 + alpha * ||w||^2_2
from sklearn.linear_model import Ridge  
ridge = Ridge(alpha=1.0)   # 岭回归的实例化及参数设置 
ridge.fit(x_train,y_train)
y_predict = ridge.predict(x_test)
result = ridge.score(x_test, y_test)

# LASSO  (1 / (2 * n_samples)) * ||y - Xw||^2_2 + alpha * ||w||_1
from sklearn.linear_model import Lasso

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值