一.什么是多元线性回归
在回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。因此多元线性回归比一元线性回归的实用意义更大。
二.多元线性回归的一些推导过程
三.使用代码来实现多元线性回归
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] #加载自己的模块 from playML.LinearRegression import LinearRegression reg = LinearRegression() #实例化过程 reg.fit_normal(X_train,y_train) #训练数据集的过程 reg.coef_ #查看相应的特征属性值 ''' array([-1.18919477e-01, 3.63991462e-02, -3.56494193e-02, 5.66737830e-02, -1.16195486e+01, 3.42022185e+00, -2.31470282e-02, -1.19509560e+00, 2.59339091e-01, -1.40112724e-02, -8.36521175e-01, 7.92283639e-03, -3.81966137e-01]) ''' reg.intercept_ #截距:34.16143549624022 reg.score(x_test,y_test) #查看算法的准确性 :0.8129802602658537
三.使用sklearn实现多元线性回归
1.使用linear_model的LinearRegression模块来解决
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] #采用自己写的分割方法对原始数据进行分割,分割成为训练数据和测试数据 from playML.model_selection import train_test_split X_train,x_test,y_train,y_test=train_test_split(X,y,seed=666) #导入相应的模块 from sklearn.linear_model import LinearRegression lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) #特征参数的值 lin_reg.coef_ ''' array([-1.18919477e-01, 3.63991462e-02, -3.56494193e-02, 5.66737830e-02, -1.16195486e+01, 3.42022185e+00, -2.31470282e-02, -1.19509560e+00, 2.59339091e-01, -1.40112724e-02, -8.36521175e-01, 7.92283639e-03, -3.81966137e-01]) ''' #截距 lin_reg.intercept_ #34.16143549624665 #测试算法的准确度 R Squared lin_reg.score(x_test,y_test) #0.8129802602658495
2.使用knn算法来解决回归问题
1.采用系统默认的参数来进行knn测试算法的精确度
#采用系统默认的参数来进行相关的测试 from sklearn.neighbors import KNeighborsRegressor knn_reg = KNeighborsRegressor() knn_reg.fit(X_train,y_train) knn_reg.score(x_test,y_test) #0.5865412198300899
2.使用knn进行网格搜索,找到最优参数,并测出算法的精确度
from sklearn.neighbors import KNeighborsRegressor knn_reg = KNeighborsRegressor() 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=2) grid_search.fit(X_train,y_train) #最优超参数 grid_search.best_params_ #{'n_neighbors': 5, 'p': 1, 'weights': 'distance'} #使用最优超参数得到的算法精确度 grid_search.best_estimator_.score(x_test,y_test) #0.7044357727037996
3.两种方式的对比
在上述两种方法中,看上去第一种方法的精确度比第二中方法的精确度要高,但是我们能说第一种算法的精确度比第二种方法的精确度好吗?答案是否定的,因为两种方法的精确度的计算方法是不一样的,比较的指标参数也是不一样的,因此,我们不能武断的下结论说算法一比第二种算法的精确度高。