赞
踩
pip install sklearn
说明:使用sklearn库中的LinearRegression的输入必须是二维[[1,2,5…]]
#1.导包
from sklearn.linear_model import LinearRegression
model=LinearRegression()
训练模型:
model.fit(x,y)
模型评估:
model.score(x,y)
模型预测:
model.predict(x)
''' y=ax+b (y为因变量,x为自变量,a为权重,b为截距。) 1.数据相关性分析中,经常用到data.corr()函数,data.corr()表示了data中的两个变量之间的相关性,取值范围为[-1,1],取值接近-1,表示反相关,类似反比例函数,取值接近1,表正相关。 ''' from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split #切分训练集和验证集 import pandas as pd import os #第一步,读取数据 path = os.getcwd().replace('\\','/') + str('/1.回归问题/data/data.csv') data = pd.read_csv(path) # print(data.corr()) Y = data[['销售额']] #将一维数据自动转化为二维数组 X = data[['广告投入']] # 第二步,1.画出散点图,求x和y的相关系数 # plt.scatter(data.广告投入, data.销售额) #输入x和y数据 # plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 # plt.xlabel("广告投入") # plt.ylabel("销售额") #第二步,2.绘热力图 # import seaborn as sns # f, ax= plt.subplots(figsize = (14, 10)) # sns.heatmap(corr,cmap='RdBu', linewidths = 0.05, ax = ax) # # 设置Axes的标题 # ax.set_title('Correlation between features') # plt.show() # plt.close() # f.savefig('sns_style_origin.jpg', dpi=100, bbox_inches='tight') #热力图保存 #%% #第三步,生成linalg regression模型---拟合函数 linear_regressor = LinearRegression() x_train,x_test,y_train,y_test = train_test_split(X,Y,test_size=0.3,random_state=0) #则表示7:3进行划分数据集 linear_regressor.fit(x_train,y_train) #拟合函数 # linear_regressor.fit(x_train,y_train).summary() #模型描述 Y_pred = linear_regressor.predict(x_test) #预测y 使用训练集train拟合得到拟合函数后,再使用测试集test得到预测值 print('a权重:',linear_regressor.coef_) print('b截距:',linear_regressor.intercept_) #第四步,数据可视化 plt.figure(figsize=(10,5)) # 训练接和测试集都以散点来表示,拟合线用折线表示 plt.scatter(x_train,y_train,s=10,label='训练集',c='b') plt.scatter(x_test,y_test,s=10,label='测试集',c='g') plt.plot(X,linear_regressor.predict(X),label='拟合线',c='r') #x表所有的自变量 plt.legend() # 第五步,模型评估--这些任意可以选择,根据模型的还会去确定取舍 from sklearn.metrics import mean_squared_error,mean_absolute_error,r2_score mes_test = mean_squared_error(y_test,Y_pred) print("平均方误差(MSE):",mean_squared_error(y_test,Y_pred)) print("根均方误差(RMSE):",mean_absolute_error(y_test,Y_pred)) print("平均绝对值误差(MAE):",r2_score(y_test,Y_pred)) RR = linear_regressor.score(x_test,y_test) print("决定系数:",RR) #模型越接近1,表示该模型越好 # 补充---验证该模型是否过拟合(通过训练集train进行验证) Y_train_pred = linear_regressor.predict(x_train) #预测y mse_train = mean_squared_error(y_train,Y_train_pred) # 当mes_train和mse_test误差很小,则证明该模型未发生过拟合现象。 # # https://blog.csdn.net/qq_41583295/article/details/86444760?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-86444760-blog-121026296.pc_relevant_default&spm=1001.2101.3001.4242.2&utm_relevant_index=4 # # # 5. 显著性检验 # # 5.1 线性相关变量的显著性检验,皮尔逊相关系数 # # print(scipy.stats.pearsonr(x, y)) # 返回r值和相关系数假设检验的p值。r越大表示线性相关程度越高。p值越小,表示原假设“总体相关系数=0的可能性越小,r值可信度越高。 # # # 5.2 线性or非线性相关变量的显著性检验 # # 5.2.1 F检验 # MSR = SSR / p # F = MSR / MSE # F_p = scipy.stats.f.sf(F, p, n - 2) # print('F检验的p值', F_p) # # # 5.2.2 t检验 # s_coef = np.sqrt(MSE) / np.sqrt(n * np.var(x)) # t = model.coef_ / s_coef # print(t) # t_p = scipy.stats.t.sf(t, n - 2) # print('t检验的p值:', t_p) `` ```c 在这里插入代码片
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。