机器学习之线性回归案例分析与学习

以下是我接触线性回归并理解的一个案例,我对每一个步骤的用意以及理解都以通俗易懂的方式写出来,希望对你们有所帮助

#前面都是一些简单的引入
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression  #这个很重要!!
'''
sklearn属于新的知识,我简单介绍一下,sklearn是一个封装了大量经典以及最新的机器学习模型,分为分类,回归,聚类,数据降维等等,每一个模块都含有大量的好用算法,linear_model英语比较好的话应该就知道这个就是线性回归的一种模型,LinearRegression 是 scikit-learn 库中的一个线性回归模型类,用于实现线性回归算法。

----应该会有同学疑惑线性回归是一个什么东西。我简单地描述一下,线性回归就是一种预测的模型,想让你通过输入一系列特征变量,从而得到目标变量的一种模型,其中运用了线性关系。
那我们应该怎么实现呢?我简单地说一下我的理解
就是我们通过输入一个矩阵(由训练集【训练集是啥,我们待会会说】的特征变量构成),这个矩阵的每一行都是一个案例,也就是我们用来训练的实例,然后我们再输入一个矩阵(如果目标变量只有一个的话,那就相当于一个向量),这个矩阵就对应每一组数据的结果,我们可以把由特征变量转化到目标变量的过程视为f(x) = w1x1 + w2x2 +w3x3 + ...wnxn+b(因为是线性回归嘛),我们的目的(!!!)就是要求w1,w2
,w3...,wn,b(b让模型的拟合更加灵活,毕竟可以上下移动了嘛),相当于已知x,y,反推f,我们可以通过某种方法得出f,其实就是基于某种让误差趋于小的算法(这里先不学,代码已经帮我们封装好了,我们直接用就好),然后我们就得到了一个函数,这个函数我们就可以用来预测,给一组新的x,他会给出新的y,这就是线性回归的过程,然后我们后续再用测试机对他进行预测的准确度的分析。
'''
from pandas import DataFrame,Series

#1数组准备阶段,并把数据划分为训练集和测试集(训练集就是前期用来确定f函数的,测试集是后期用来测试的)
filename = "house_price.csv"
data = pd.read_csv(filename)
from sklearn.model_selection import train_test_split  #这个模块的这个类就是用来划分数据集的
x = data.iloc[:,1:5].values.astype('float')
'''
这里有一些细节,就是我们的训练集或者测试集都必须是narray数组,又因为iloc得到的切片仍然是dataframe,所以这里还要用values转化成narray数组,
而astype成float也让数据更加精准吧,毕竟可以保留到小数位
'''
y = data.iloc[:,0].values.astype('float')
'''
这就是分割操作,test_size是测试集的占比,然后random_state固定的话可以让每次的训练集和测试集都是固定的(也就是说哪次选第几行做训练集,下次再次执行不会再变)保持 random_state 不变是确保机器学习实验稳定性和可重复性的关键所在。当比较不同模型的时候,训练集和测试集一样就很重要了
'''
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=1)

#2在训练集上训练回归模型linregt
linregt = LinearRegression()  #先要创建一个要来学习数据的对象
linregt.fit(x_train,y_train) #fit就是在训练(其中隐藏着很多算法)相当于给这个数据喂饭吃
print(linregt.intercept_,linregt.coef_) #训练好后linrgt现在就相当于是一个线性预测函数了,所以他就有它固定的系数和截距,intercept就是截距,coef_就是[w1,w2,...wn]的值

#3在测试集上应用模型,计算预测结果,以及测出RMSE和决定系数R^2(这两个就有利于判断函数的准确度)
from sklearn import metrics  #metrics里面就包含很多评估指标的计算方法
y_test_pred = linregt.predict(x_test) #一般情况下,我们测试的时候就不用训练集
test_err = metrics.mean_absolute_error(y_test,y_test_pred) #这里计算出RMSE(均方误差)
predict_score = linregt.score(x_test,y_test) #这里算出了决定系数(决定系数比较重要)

'''
为什么说决定系数比较重要,因为对于均方误差,其实只要数据足够多,就算拟合地再好,只要不是完全拟合,均方误差都会一直增大,很难看出来到底拟合地怎么样,但是决定系数可以,越接近1拟合得越好。

这里还要注意均方误差的参数是y的实际值以及y的预测值(因为就是对他们的差集做平方和相加),其实就相当于一个数学公式,与f没什么关系其实
而决定系数的参数是x的实际值和y的实际值,因为可以看到他是用linregt算的,这个linregt以及是一个固定的函数了,所以也默认包含了y的实际值等信息,所以这个时候你只要把x和y输入就可以判断这个准不准了
'''

在这里插入图片描述
这是那个数据集的样子,这和我data怎么取是有很大关系的,大家可以看一看

好啦,今天的机器学习就结束了。创建一个好的模型是很重要的,但更重要的是理解模型的工作原理。学海无涯,但是有你们的陪伴就不苦辣,大家一起加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值