机器学习 sklearn几个回归模型的封装测试在不同的数据类型的表现以及适用情况

写在前面的话:这一段时间都是在学习sklearn库的学习,当通过这一段时间的了解各个模型的精确度想要进行比较 一下,所以想着自己把同一类的算法封装的一块以后直接调用接口,当然在这个封装过程中只是单纯的库函数实现的模型,对于调整参数没有过多设

  1. 首先我们这次选取的就j就是datasets 库里面波士顿房价问题
  2. 在这个问题之前我们先来介绍一下各个模型的适配对象,最先想到的就是三个线性回归模型
    lassso 和Ridge 以及线性lineaRegression 之间不同的区别一个针对高纬度数据的回归。优点包括:
    最小角回归1. 当维度远远大于数据点的个数时,非常有效。
    Ridge拥有向前选择法的速度,同时具有普通最小二乘法的复杂度。
    LineaRegression更符合人的直觉,比如两个相似的数据会有两个相似的结果。
    缺点:因为他是基于迭代的,所以对噪声特别敏感。
import pandas as pd 
import matplotlib.pyplot as  plt 
from sklearn import model_selection
from sklearn import datasets 
# from sklearn.neighbors import KNeighborsClassifier 

data=datasets.load_boston()
print(data.data.shape)
print(data.target.shape)
boston_x=data.data
boston_y=data['target']


from  sklearn import model_selection 
from sklearn import preprocessing 
from sklearn.pipeline import Pipeline#多项式回归
#导入弹性网络,多元lasso多维任务  omp正交匹配追踪omp
from sklearn.linear_model import LinearRegression,Lasso,Ridge,ElasticNet,MultiTaskLasso,OrthogonalMatchingPursuit,BayesianRidge,RANSACRegressor,TheilSenRegressor
from sklearn import metrics 

前期的导入数据之后首先实现训练集数据集的分割,然后import模型库,这里面有几个其他的回归模型,针对的的是不同的情况,想要了解的可以在百度一下,现在我们的重点是在最熟悉和经常用的的三个回归模型之间的区别

def pred_model(x,y):
    
    lasso=Lasso()
    lasso_model=lasso.fit(x,y)#L1正则化

    linreg=LinearRegression()
    linregTr=linreg.fit(x,y)

    ridge=Ridge()#L2正则化
    Ridge_model=ridge.fit(x,y)

    elasticnet=ElasticNet()
    elasticnet_model=elasticnet.fit(x_train,y_train)#弹性网络最初用来基于位置关系的社交网路

    # mul_lasso=MultiTaskLasso.fit(x_train,y_train)
    # MultiTaskLasso_model=mul_lasso.fit(x_train,y_train)#多线程lasso  

    omp=OrthogonalMatchingPursuit()
    omp_model=omp.fit(x_train,y_train)

    baye_ridge=BayesianRidge()
    baye_ridge_model=baye_ridge.fit(x_train,y_train)

    Ransac=RANSACRegressor()
    ransac_model=Ransac.fit(x_train,y_train)

    Theil=TheilSenRegressor()
    Theil_model=Theil.fit(x_train,y_train)

    # return linregTr
    # return lasso_model
    # return Ridge_model
    # return elasticnet_model 
    # return mul_model
    # return omp_model  #45/100
    # return baye_ridge_model #70/100
    # return ransac_model  #57/100 鲁棒回归
    return Theil_model  #74/100点数和维度不高的时候使用

def scor_diced(model):
    scor_diced=model.score(x_train,y_train)
    return scor_diced

def scor_pred(model):
    scor_pred=model.score(x_test,y_test)
    return scor_pred 

封装好的接口直接调用,然后精确度也可以直接调用函数测取
其实通过不同数据的比较我们可以发现,Ridge 和lasso函数都可以降低过拟合,都是在后面加了一个惩罚项,但是lasso更加是符合数学标准的避免过拟合,具体的数学推导可以自行百度

model=pred_model(x_train,y_train)
score_pred=scor_pred(model)
print(score_pred)

你可能感兴趣的:(机器学习路线,防止过拟合的L和L2正则化,回归预测问题的模型选择)