python-机器学习实现线性回归模型案例-入门

走进机器学习线性回归

机器学习线性回归案例讲解_机器学习⼊门:线性回归案例机器学习定义

机器学习是⼀个源于数据的模型的训练过程,最终归纳出⼀个⾯向⼀种性能度量的决策。

机器学习步骤

提出问题

理解数据

数据清洗

构建模型

评估

案例: 学习时间与考试分数之间的相关性

1,问题:学习时间与考试分数之间的相关性

2,理解数据

导⼊数据集

#导⼊包

from collections import OrderedDict

import pandas as pd

#数据集

examDict={

'学习时间':[0.50,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)

examDf

获取数据描述统计信息

examDf.describe()

examDf.shape

绘制散点图

#绘制散点图

import matplotlib.pyplot as plt

exam_X=examDf.loc[:,'学习时间']

exam_y=examDf.loc[:,'分数']

#散点图

plt.scatter(exam_X,exam_y,color='b',label='exam data')

#添加图标标签

plt.xlabel('Hours')

plt.ylabel('Score')

#显⽰图⽚

plt.show() rDf=examDf.corr()

print('相关系数矩阵:')

rDf

构建模型

#Linear Regression in python

from sklearn import linear_model

reg=linear_model.LinearRegression()

reg.fit([[0,0],[1,1],[2,2]],[0,1,2])

reg.coef_

查看数据

examDf.head()提取特征标签

#提取特征和标签

#特征features

exam_X=examDf.loc[:,'学习时间']

exam_y=examDf.loc[:,'分数']

导⼊数据

from sklearn.cross_validation import train_test_split

#建⽴训练数据和测试数据

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,

'测试数据标签:',y_test.shape)可视化

#绘制散点图

import matplotlib.pyplot as plt

plt.scatter(X_train,y_train,color='blue',label='train data')

plt.scatter(X_test,y_test,color='red',label='test,data')

#添加标签

plt.legend(loc=2)

plt.xlabel('Hours')

plt.ylabel('Score')

#显⽰图像

plt.show()

构建模型 :训练数据80% ——输出模型

测试数据20% ——评估模型准确率

#将训练数据特征转换成⼆维数组XX⾏*1列

X_train=X_train.reshape(-1,1)

#将测试数据特征转换成⼆维数组⾏数*1列

X_test=X_test.reshape(-1,1)

#训练模型

#第⼀步:导⼊线性回归

from sklearn.linear_model import LinearRegression

#第⼆步:创建模型:线性回归

model=LinearRegression()

#第三步:训练模型

model.fit(X_train,y_train) '''

最佳拟合线:

y=a+bx

截距intercept:a

回归系数:b

'''

#截距

a=model.intercept_

b=model.coef_

print('最佳拟合线:截距a=',a,'回归系数b=',b)可视化

#绘图

import matplotlib.pyplot as plt

#绘制散点图

plt.scatter(X_train,y_train,color='blue',label='train data')

#训练数据的预测值

y_train_pred=model.predict(X_train)

#绘制最佳拟合线

plt.plot(X_train,y_train_pred,color='black',linewidth=3 ,label='best line')

#添加标签

plt.legend(loc=2)

plt.xlabel('Hours')

plt.ylabel('Score')

#显⽰图⽚

plt.show()

评估

#评估模型:决定系数R平⽅

model.score(X_test,y_test)

总结果可视化

#绘图

import matplotlib.pyplot as plt

#绘制散点图

plt.scatter(X_train,y_train,color='blue',label='train data')

plt.scatter(X_test,y_test,color='red',label='test data')

#绘制最佳拟合

y_train_pred=model.predict(X_train)

plt.plot(X_train,y_train_pred,color='black',label='best line')

#添加标签

plt.legend(loc=2)

plt.xlabel('Hours')

plt.ylabel('Score')

plt.show()结论:学习时间与分数成正相关关系。学习时间越长,分数越⾼。

统计知识点解析:

1、单变量数据与⼆变量数据

单变量数据:只考虑⼀个单⼀变量的频数或概率。

⼆变量数据:考虑两个变量数值,并给出两变量间关系。

⼆变量数据可视化:散点图(Scatter)

2、相关与回归

3种线性相关:正线性相关、负线性相关、不相关

3,误差平⽅和和协⽅差

误差平⽅和:Y的实际值以及通过最佳拟合线得出的预测值之间的差值

公式:SSE=∑(y-^y)² 近似⽅差

协⽅差:协⽅差⽤于衡量两个变量的总体误差

公式:4、最佳拟合线

定义:使样本点到该直线的离差平⽅和达到最⼩的直线

公式:y=a+bx (回归线)

b=∑(x- ¯x)(y- ¯y)/∑(x- ¯x)²

a=¯y-b¯x

5、相关系数

定义:计算直线拟合度

功能:

1)两个变量的相关⽅向 正:朝上 负:朝下

2)相关性⼤⼩表⽰两个变量每单位的相关程度

一、代码实现部分

1.导入必备的库并且设置中文乱码问题

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 设置正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 设置字体大小
plt.rcParams.update({'font.size': 16})
data = pd.read_excel('./居民人均可支配收入基尼系数.xlsx',header=0, index_col=0)

2.读取数据

data = pd.read_excel('./居民人均可支配收入基尼系数.xlsx',header=0, index_col=0)

2.1打印数据

 3.设定X和y1的值并保存模型

 4.设定新的X值

 5.绘图 



二、结果展示

 三、实现的完整代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 设置正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 设置字体大小
plt.rcParams.update({'font.size': 16})
data = pd.read_excel('./居民人均可支配收入基尼系数.xlsx',header=0, index_col=0)
#print('data:\n',data)



X = np. arange(2003, 2022).reshape(-1, 1)
y1 = data['指标值'].tolist()

model = LinearRegression()
model.fit(X, y1)


X_new = np.arange(2001, 2026).reshape(-1, 1)

plt.figure(figsize=(16, 8))
# 历史样本散点图
plt.scatter(X, y1)
# 新样本预测
plt.plot(X_new, model.predict(X_new), color='red')
plt.title('\n基尼系数\n')
plt.xlabel('年份')
plt.ylabel('单位:%')
plt.show()




  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青枫浦上看桃花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值