线性回归,多元线性回归

1.一次线性回归

from collections import OrderedDict
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
#数据集
examDict = {'学习时间':[0.5,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
            '分数':[10,22,13,43,20,22,33,50,62,48,55,75,62,73,81,76,64,82,90,93]}
examOrderDict = OrderedDict(examDict)
examDf = pd.DataFrame(examOrderDict)#相当于excel表格即转化为excel表格
# print(examDf.head())

exam_x = examDf.loc[:,'学习时间']#定位

exam_y = examDf.loc[:,'分数']
#
# print(exam_x)
#
# print(exam_y)

#画图看分布情况
# plt.scatter(exam_x,exam_y,c ='y',marker = '^')
# plt.xlabel("Hours")
# plt.ylabel('Score')
# plt.show()

#建立训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(exam_x,exam_y,train_size=.8)

#输出特征和标签
print('原始特征数据:',exam_x.shape,'训练集数据特征:',x_train.shape,'测试集数据特征:',x_test.shape)
print('原始数据标签:',exam_y.shape,'训练集数据标签:',y_train.shape,'测试集训练标签:',x_test.shape)#.shape查看矩阵或数组的维数

plt.scatter(x_train,y_train,c = 'y',marker='o', label = "train_data")
plt.scatter(x_test,y_test,c='r',marker='^',label = 'test_data')
plt.xlabel('Hours')
plt.ylabel('Score')

#相关系数矩阵
rDf = examDf.corr()
print(rDf)

x_train = x_train.values.reshape(-1,1)#将训练集特征转换为二维数组
x_test = x_test.values.reshape(-1,1)#将测试集特征转换为二维数组

#训练模型

model = LinearRegression()
model.fit(x_train,y_train)

a = model.intercept_#截距
b = model.coef_
print('最佳拟合曲线: 截距为:',a,'回归系数为:',b)
y_test_predict = model.predict(x_test)
plt.plot(x_test,y_test_predict,color = 'blue',label = 'best line')
plt.legend()
plt.show()
c = model.score(x_test,y_test)#评估模型精确度
print(c)

2.多元线性回归

import pandas as pd
import matplotlib.pyplot as plt
from collections import OrderedDict
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
#通过read_csv来读取我们的目的数据集
adv_data = pd.read_csv("C:/Users/Administrator/Desktop/Advertising.csv",encoding='ISO-8859-1')
#清洗不需要的数据
new_adv_data = adv_data.iloc[:,0:]
#得到我们所需要的数据集且查看其前几列以及数据形状
print('head:\n',new_adv_data.head(),'\nShape:',new_adv_data.shape)
print(new_adv_data.describe())

#缺失值检验
print(new_adv_data[new_adv_data.isnull() == True].count())

#箱图
# new_adv_data.boxplot()
# plt.show()

#相关系数矩阵
print(new_adv_data.corr())
sns.pairplot(new_adv_data,x_vars=['TV','radio','newspaper'],y_vars =['sales'],height = 10,aspect=0.8,kind = 'reg')
plt.show()

#建立训练集和测试集
X_train,X_test,y_train,y_test = train_test_split(new_adv_data.iloc[:,:3],new_adv_data.sales,train_size=.80)
print('原始数据特征:',new_adv_data.iloc[:,:3].shape,'训练数据特征:',X_train.shape,'测试数据特征:',X_test.shape)
print('原始数据标签:',new_adv_data.sales.shape,'训练数据标签',y_train.shape,'测试数据标签:',y_test.shape)

#训练模型
model = LinearRegression()
model.fit(X_train,y_train)
a = model.intercept_
b = model.coef_
#y = b*x + a
print("最佳拟合曲线:",'截距:',a,'回归系数:',b)

#预测与模型测评
score = model.score(X_test,y_test)
print(score)#越接近1越好

#对线性回归进行预测

Y_pred = model.predict(X_test)
print(range(len(Y_pred)))

plt.plot(range(len(Y_pred)),Y_pred,'b',label = 'predict')#列出每一个预测值
plt.plot(range(len(Y_pred)),y_test,'r',label ='test')#和测试集进行对比
plt.legend(loc = 'upper right')
plt.xlabel('the number of values')
plt.ylabel('value of sales')
# plt.savefig()
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值