线性回归实例-----预测鲍鱼年龄

预测鲍鱼年龄

前言

  线性回归是监督学习的一个方向,用来预测连续数值型数据。比如房价预测、销量预测等等。

  • 优点:计算简单,易于理解
  • 缺点:只使用与线性数据,对于非线性数据使用非线性回归模型
  • 使用条件:连续的数值型数据

实战:预测鲍鱼年龄

1.数据源

  本文使用的数据源是从UCI数据库中获取。UCI数据库是个常用的标准测试数据库。
下载地址:https://archive.ics.uci.edu/ml/datasets/Abalone
在这里插入图片描述
点击 Data Folder 进行下载
在这里插入图片描述
其中abalone.data是数据源,abalone.names是对数据的解释说明,包含列名、含义等等。可使用记事本打开。这里将其转为.txt格式

2.数据处理

1.读取数据
# 引包
[1]:import pandas as pd
	import numpy as np

# 读取数据
[2]:data = pd.read_table("abalone.txt",sep=",",header=None)
	data.columns = ["Sex","Length","Diameter continuous","Height","Whole weight","Shucked weight","Viscera weight","Shell weight","Rings"]
	data.head()

在这里插入图片描述

2. 数据处理

对性别转为数值类型,“M”为1,“F”为-1,“|”为0

# 对性别转为数值类型,“M”为1,“F”为-1,“|”为0
[4]:def tran(x):
	    if x == "M":
	        return 1
	    elif x == "F":
	        return -1
	    else:
	        return 0
[5]:data.Sex = data.Sex.apply(tran)

[6]:data.shape
[6]:(4177, 9)

3.建模

1.引包
# 将数据矩阵随机划分训练集和测试集
from sklearn.model_selection import train_test_split
# 线性回归模型
from sklearn.linear_model import LinearRegression
# 画图
import plotly
import plotly.graph_objs as go
# 评估模型准确率
from sklearn import metrics
2.查看数据

这里使用三个属性来初步查看数据

fig1 = go.Scatter3d(x=data['Length'],
                    y=data['Height'],
                    z=data['Whole weight'],
                    marker=dict(opacity=0.9,
                                reversescale=True,
                                colorscale='Blues',
                                size=5),
                    line=dict (width=0.02),
                    mode='markers')

mylayout = go.Layout(scene=dict(xaxis=dict( title="curb-weight"),
                                yaxis=dict( title="horsepower"),
                                zaxis=dict(title="price")),)

plotly.offline.plot({"data": [fig1],
                     "layout": mylayout},
                     auto_open=True,
                     filename=("3DPlot.html"))

在这里插入图片描述

3.建模
# 划分训练集和数据集
[8]:X_train,X_test,Y_train,Y_test = train_test_split(data.iloc[:,0:-1],data.iloc[:,-1],test_size=0.3,random_state=10)
	X_train.shape
[8]:(2923, 8)

# 建模
[9]:model = LinearRegression()
	model.fit(X_train,Y_train)
[10]:predict_result = model.predict(X_test)
4.结果对比

拿实际数据的结果前五个和预测结果前五个进行对比:

[11]:predict_result[:5]
[11]:array([ 7.8554181 , 10.87956598,  9.89345623,  6.64893993,  8.99769228])

[12]:Y_test[:5].values
[12]:array([ 7, 10,  8,  9, 10], dtype=int64)
5.模型评估

这里分别使用回归评估指标MSE(均方误差),RMSE(均方根误差),R-Squared(准确度)来进行评估。

[13]:mse = metrics.mean_squared_error(Y_test,predict_result)
	 mse
[13]:4.926650489974809

[14]:rmse = np.sqrt(mse)
	 rmse
[14]:2.2196059312352743

[15]:r2 = metrics.r2_score(Y_test,predict_result)
	 r2
[15]:0.5298367786705702

4.总结

  可以看出模型质量并不高,并不能达到我们想要的预测结果。所以该数据源不能使用简单的线性回归模型来进行预测。本文只是对sklearn中的线性回归模型通过实例进行使用说明。以后可以使用加权线性回归进行处理。

未完待续。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值