数学建模之Python线性回归模型

一元线性回归:

数学建模之Python线性回归模型_第1张图片

代码:

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""
#Step1 调用包
from sklearn.linear_model import LinearRegression
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt

#Step2 导入数据
data = pd.read_excel('data_airline.xls', 
                     encoding = 'gb2312')
x_data=data.iloc[:,1]
y_data=data.iloc[:,2]

#Step3 绘制散点图

#预处理: 设置汉字为黑体
matplotlib.rcParams['font.family'] = 'SimHei' 

#绘制散点图
plt.scatter(x_data,y_data) 
plt.xlabel('航班正点率(%)')
plt.ylabel('投诉次数(次)')
plt.title('航空公司航班正点率与投诉次数关系散点图')
plt.show()


#Step4 创建并拟合模型

#预处理:转换数据格式为sklearn要求格式
x_data=x_data[:,np.newaxis]
y_data=y_data[:,np.newaxis]

#调用最小二乘法函数求回归系数
model=LinearRegression()
model.fit(x_data,y_data)

#Step5 报告结果

# 显示斜率
a = model.coef_[0]
print("自变量x的系数a为: ", np.round(a,2))
#np.round保留小数点设置

# 显示截距
b = model.intercept_
print("常数项(截距)为: ", np.round(b,2))

# 画拟合效果图
plt.plot(x_data,y_data,'b.')
plt.plot(x_data,model.predict(x_data),'r')
plt.show()

#Step6 应用--预测
x_test = np.array([[77]])
predict = model.predict(x_test)
print("预测值: ", np.round(predict,2))

关于最小二乘估计的文献在第三此模拟论文中15页 提醒一下自己

多元线性回归模型

数据集:
https://gitee.com/web-paul/python_data

# -*- coding: utf-8 -*-
"""
Created on Sun Nov 17 22:58:41 2019

@author: Administrator
"""

'''step1 调用包'''
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from pandas import DataFrame
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

'''step2 导入数据'''
data0 = pd.read_csv('data_advertising.csv')
data1 = DataFrame(data0)

'''step3 数据预处理'''
#数据清洗,比如第一列有可能是日期或序号,
#这样的话我们就只需要从第二列开始的数据,
#这个情况下,把下面中括号中的0改为1就好。
data = data1.iloc[:,1:]
 
#绘制Y与每个xi的散点图
#通过seaborn添加一条最佳拟合直线和95%的置信区间,
#直观判断相关关系
sns.pairplot(data, x_vars=['TV','radio','newspaper']
          , y_vars='sales', height=7, 
          aspect=0.8, kind='reg')  
plt.show()


'''step4 划分数据集'''
#(将带类标号数据#划分为训练集(80%)
#和检验集(20%)

#将类别列和特征列拆分,
#便于下面调用划分函数
X = data.iloc[:,:3]
y = data.iloc[:,3]
#调用sklearn中的函数划分上述数据
X_train,X_test,Y_train,Y_test = train_test_split(
              X,y,train_size=0.8,random_state=0)

'''step5 模型计算(训练、检验、评价)'''
#step5.1 训练模型
#调用线性规划包
model = LinearRegression()
model.fit(X_train,Y_train) #线性回归训练
 
a = model.coef_#回归系数
b = model.intercept_#截距
print('\n 判别函数系数:xi系数:\n',np.round(a,3))
print('\n判别函数系数:截距:\n' ,np.round(b,2))

#step5.2 检验模型
Y_pred = model.predict(X_test)
#对测试集数据,用predict函数预测

 #step5.3 模型评价(准确率)
#这里Y_test为真实检验集的y值
#Y_pred为模型预测的检验集的y值
#比较二者误差即可得到模型准确程度
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
plt.plot(range(len(Y_pred)),Y_pred,'red', 
         linewidth=2.5,label="预测值")
plt.plot(range(len(Y_test)),Y_test,'blue',
         label="真实值")
plt.legend(loc=2)
plt.show()#显示预测值与测试值曲线

#计算相关模型评价指标
from sklearn.metrics import mean_squared_error          #均方误差
from sklearn.metrics import r2_score                    #R square
mse = mean_squared_error(Y_test,Y_pred)
rmse = np.sqrt(mse)
r_squared = r2_score(Y_test,Y_pred)
#显示结果
print("\n 均方误差(MSE):",np.round(mse,4))
print("\n 均方根误差(RMSE):",np.round(rmse,4))
print("\n 调整的R方(拟合优度,R Squared):"
              ,np.round(r_squared,4))

'''Step6 应用--预测'''
Y_pred2 = model.predict([[43.2,11.7,56.7]])
#对明年销量数据,用predict函数预测
print('明年销量为:',np.round(Y_pred2,2))



数学建模之Python线性回归模型_第2张图片

你可能感兴趣的:(Python机器学习与数学建模,机器学习,python,数据分析,逻辑回归)