使用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
然后对数据集进行切分,由于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)
查看其中的内容
lin_reg.coef_
lin_reg.intercept_
lin_reg.score(X_test,y_test)
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)
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)
得到结果以后可以简单地来看看最好的结果(不知道为啥,很多计算的数据结果我都和课程不一样,不知道是电脑问题还是版本问题)
grid_search.best_params_
预测准确率
grid_search.best_score_
为了得到相同的衡量标准的预测率结果,来真正看基于网格搜索算法的结果
grid_search.best_estimator_.score(X_test,y_test)
这是不如线性回归的结果的
但是也是有一部分原因是因为使用网格搜索的时候我们比较实用的score是 GridSearchCV中的score的计算方法,我们没有挑出来使用我们这组数据中的score的来获得的最佳参数,不能武断的说某算法不如某算法,要结合应用环境以及场景才行