【自然语言处理入门】03:利用线性回归对数据集进行分析预测(下)

上一篇中我们简单的介绍了利用线性回归分析并预测波士顿房价数据集,那么在这一篇中,将使用相同的模型来对红酒数据集进行分析。

1 基本要求

利用线性回归,对红酒数据集进行分析。数据集下载地址

2 完整代码

#-*- coding: UTF-8 -*-
# @Time    : 2017/12/21 9:29
# @Author  : xiongzongyang
# @Software: PyCharm

import pandas as pd
from pandas import Series, DataFrame
import numpy as np
from sklearn.linear_model import LinearRegression #线性回归
from sklearn.metrics import mean_squared_error
import matplotlib as mpl
import matplotlib.pyplot as plt

#读取数据
def read_data(data_path="./data/"):
    test_data = pd.read_csv(data_path+"test.csv", header=None)
    train_data = pd.read_csv(data_path+"train.csv", header=None)
    return train_data,test_data
#数据处理
def deal_data(pd_data):
    #获取数据的行数,因为要出去字段名,所以要-1
    row_cnt = pd_data.shape[0]-1
    #计算列数,因为在读入数据时,没有指定分隔符,所以所有列数据都是作为一列数据来读入的,因此在计算列数时,将读入的每一行按照;来分开
    column_cnt = len(pd_data.iloc[0, 0].split(";"))
    #empty 会创建一个没有使用特定值来初始化的数组。给这些方法传递一个元组作为形状来创建高维数组:
    X = np.empty((row_cnt, column_cnt - 1))
    Y = np.empty((row_cnt, 1))
    column_name=pd_data.iloc[0, 0].split(";")
    #开始获取数据
    for i in range(0, row_cnt):
        #逐一将每一行进行分割(按;空格分割)
        row_array = pd_data.iloc[i+1, 0].split(";")
        #x取前13个数据,X[i]是一个一维数组,则X相当于一个二维数组,Y同理
        X[i] = np.array(row_array[0:-1])
        #y取最后一个数据
        Y[i] = np.array(row_array[-1])
    return X, Y,column_name
#把特征标准化为均匀分布
def uniform_norm(X):
    X_max = X.max(axis=0)
    X_min = X.min(axis=0)
    return (X - X_min) / (X_max - X_min), X_max, X_min

#实现线性回归
#画图
def draw(pred,test_Y):
    t = np.arange(len(pred))
    mpl.rcParams['font.sans-serif'] = [u'simHei']
    mpl.rcParams['axes.unicode_minus'] = False
    plt.figure(facecolor='w')
    plt.plot(t, test_Y, 'r-', lw=2, label=u'true value')
    plt.plot(t, pred, 'b-', lw=2, label=u'estimated')
    plt.legend(loc='best')
    plt.title(u'wine quality', fontsize=18)
    plt.xlabel(u'case id', fontsize=15)
    plt.ylabel(u'quality', fontsize=15)
    plt.grid()
    plt.show()
#模型评估
def evaluate(unif_train_X,train_Y,unif_test_X,test_Y):
    print("训练集上效果评估:")
    pred_train = model.predict(unif_train_X)
    print("R^2系数 ", model.score(unif_train_X, train_Y))
    print("均方误差 ", mean_squared_error(train_Y, pred_train))
    print("\n测试集上效果评估 :")
    r2 = model.score(unif_test_X, test_Y)
    print("R^2系数 ", r2)
    pred = model.predict(unif_test_X)
    print("均方误差 ", mean_squared_error(test_Y, pred))

#主函数
if __name__ == "__main__":
    #读取数据
    train_data,test_data=read_data()
    #数据处理
    train_X, train_Y,column_name=deal_data(train_data)
    # print(train_X.shape)
    # print(train_Y.shape)
    test_X, test_Y,column_name=deal_data(test_data)
    # print(test_X.shape)
    # print(test_Y.shape)
    #把特征标准化为均匀分布
    unif_train_X, max_X, min_X = uniform_norm(train_X)
    unif_test_X = (test_X - min_X) / (max_X - min_X)
    #实现线性回归
    model = LinearRegression()
    model.fit(unif_train_X, train_Y)
    #在训练集上预测
    pred_train = model.predict(unif_train_X)
    #在测试集上预测
    pred = model.predict(unif_test_X)
    #画图
    draw(pred,test_Y)
    #模型评估
    evaluate(unif_train_X,train_Y,unif_test_X,test_Y)

注意:本数据集中,每一列都有列名,因此在数据预处理的过程中要去掉。

3 实验结果

image

4 实验小结

结果这两个实验可以看出,一般数据分析处理流程如下图所示。

graph LR
数据读取-->数据预处理
选择模型-->训练模型
数据预处理-->训练模型
训练模型-->测试模型
测试模型-->模型评估
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,那我来为您介绍一下线性回归分析在波士顿房价预测的应用,以及如何使用Python实现。 首先,波士顿房价预测是一个经典的回归问题,我们可以使用线性回归模型来解决该问题。线性回归模型的基本思想是通过找到一条最佳拟合直线来描述自变量和因变量之间的关系。在波士顿房价预测,我们可以将房价看作因变量,其他特征(比如房屋面积、房龄、犯罪率等)作为自变量,建立一个线性回归模型来预测房价。 接下来,我们可以使用Python来实现线性回归模型。首先,我们需要准备数据集。可以使用scikit-learn库的load_boston函数来加载波士顿房价数据集。代码如下: ```python from sklearn.datasets import load_boston boston = load_boston() X = boston.data y = boston.target ``` 然后,我们可以使用train_test_split函数将数据集分为训练集和测试集。代码如下: ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 接着,我们可以使用线性回归模型来拟合数据集。可以使用scikit-learn库的LinearRegression类来实现。代码如下: ```python from sklearn.linear_model import LinearRegression model = LinearRegression() model.fit(X_train, y_train) ``` 最后,我们可以使用训练好的模型来预测测试集的房价,并计算预测准确率。代码如下: ```python y_pred = model.predict(X_test) from sklearn.metrics import r2_score score = r2_score(y_test, y_pred) print(score) ``` 以上就是使用Python实现波士顿房价预测的基本流程。当然,为了提高模型的准确率,我们还可以进行特征工程、数据归一化、模型优化等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值