【笔记】使用scikit-learn解决回归问题

使用sklearn解决回归问题

依然是加载数据

  import numpy as np
  import matplotlib.pyplot as plt
  from sklearn import datasets

  boston = datasets.load_boston()
  X = boston.data
  y = boston.target

  X = X[y < 50.0]
  y = y[y < 50.0]

通过shape看X矩阵中的结构

  X.shape

【笔记】使用scikit-learn解决回归问题

然后对数据集进行切分,由于sklearn中的随机和分割方法不同,因此,使用自己的会比较能体现出来,但是,我懒得改了

  from sklearn.model_selection import train_test_split

  X_train,X_test,y_train,y_test =       train_test_split(X,y,random_state=666)

在sklearn中使用线性回归

引用并实例化

  from sklearn.linear_model import LinearRegression

  lin_reg = LinearRegression()

将X_train,y_train传进去,进行fit

  lin_reg.fit(X_train,y_train)

【笔记】使用scikit-learn解决回归问题

查看其中的内容

lin_reg.coef_

【笔记】使用scikit-learn解决回归问题

lin_reg.intercept_

【笔记】使用scikit-learn解决回归问题

lin_reg.score(X_test,y_test)

【笔记】使用scikit-learn解决回归问题

Knn regressor

我们也可以使用knn来解决回归问题

先到用相应的类并对其进行初始化,k默认为5,在fit以后,最后看一下准确率

  from sklearn.neighbors import KNeighborsRegressor

  knn_reg = KNeighborsRegressor()
  knn_reg.fit(X_train,y_train)
  knn_reg.score(X_test,y_test)

【笔记】使用scikit-learn解决回归问题

knn中含有超参数,我们使用网格搜索的方式来搜索一下相应的超参数,需要定义数组规定范围,创建变量构造函数,使用并行处理(-1为全部核心),并进行输出

  from sklearn.model_selection import GridSearchCV
  param_grid = [
      {
          'weights':['uniform'],
          'n_neighbors':[i for i in range(1,11)]
      },
      {
          'weights':['distance'],
          'n_neighbors':[i for i in range(1,11)],
          'p': [i for i in range(1,6)]
      }
  ]

  knn_reg = KNeighborsRegressor()
  grid_search = GridSearchCV(knn_reg,param_grid ,n_jobs=-1,verbose=1)
  grid_search.fit(X_train,y_train)

【笔记】使用scikit-learn解决回归问题

得到结果以后可以简单地来看看最好的结果(不知道为啥,很多计算的数据结果我都和课程不一样,不知道是电脑问题还是版本问题)

  grid_search.best_params_

预测准确率

  grid_search.best_score_

【笔记】使用scikit-learn解决回归问题

为了得到相同的衡量标准的预测率结果,来真正看基于网格搜索算法的结果

  grid_search.best_estimator_.score(X_test,y_test)

【笔记】使用scikit-learn解决回归问题

这是不如线性回归的结果的

但是也是有一部分原因是因为使用网格搜索的时候我们比较实用的score是 GridSearchCV中的score的计算方法,我们没有挑出来使用我们这组数据中的score的来获得的最佳参数,不能武断的说某算法不如某算法,要结合应用环境以及场景才行

【笔记】使用scikit-learn解决回归问题

上一篇:sed命令


下一篇:廖雪峰的java练习IDE插件无法正常导入Eclipse