【自然语言处理入门】03:利用线性回归对数据集进行分析预测(上)
来源:互联网 发布:童装淘宝店好做吗 编辑:程序博客网 时间:2024/05/29 14:13
本篇笔记是《从自然语言处理到机器学习入门》课程第三次作业的上篇,主要是复现了老大课上讲的利用线性回归对波士顿房价进行预测的实验。在下篇中,将利用该模型对红酒数据集进行线性回归分析。
1 基本要求
利用提供的波士顿房价数据,对其进行分析。数据地址,训练集合测试集已经分好了。
2 完整代码
#-*- coding: UTF-8 -*-# @Time : 2017/12/21 9:29# @Author : xiongzongyang# @Software: PyCharmimport pandas as pdfrom pandas import Series, DataFrameimport numpy as npimport matplotlib.pyplot as pltimport sklearn# from sklean.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegression #线性回归from sklearn.linear_model import Ridge #岭回归from sklearn.linear_model import Lassofrom sklearn.linear_model import ElasticNetCVfrom sklearn.metrics import mean_squared_errorimport matplotlib as mplimport matplotlib.pyplot as plt#读取数据def read_data(data_path="./data/"): test_data = pd.read_csv(data_path+"boston_house.test", header=None) train_data = pd.read_csv(data_path+"boston_house.train", header=None) #测试数据是否读取成功 # print(train_data) # print(test_data.head()) # #查看数据的规模 # print(train_data.shape) # print(test_data.shape) return train_data,test_data#数据处理def deal_data(pd_data): #获取数据的行数 row_cnt = pd_data.shape[0] #print(row_cnt) #计算列数,因为在读入数据时,没有指定分隔符,所以14列数据都是作为一列数据来读入的,因此在计算列数时,将读入的每一行按照空格来分开 column_cnt = len(pd_data.iloc[0, 0].split()) #print(column_cnt) #empty 会创建一个没有使用特定值来初始化的数组。给这些方法传递一个元组作为形状来创建高维数组: X = np.empty((row_cnt, column_cnt - 1)) # print(X) #创建一个高位数组 Y = np.empty((row_cnt, 1)) for i in range(0, row_cnt): #逐一将每一行进行分割(按空格分割) row_array = pd_data.iloc[i, 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#把特征标准化为均匀分布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'Boston house price', fontsize=18) plt.xlabel(u'case id', fontsize=15) plt.ylabel(u'house price', 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=deal_data(train_data) # print(train_X.shape) # print(train_Y.shape) test_X, test_Y=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 实验效果
(1)预测的效果图
(2)效果评估
4 相关知识点
本个实验中主要涉及到了以下知识点:
(1)线性回归
(2)pandas,numpy,matplotlib等相关python科学计算库
(3)数据的预处理也非常重要,熟练掌握数据预处理方法对以后的工作中或者是在读别人代码时会轻松很多。
5 相关参考
(1)主要是参考了老大的代码,然后对代码进行了分块处理。
(2)用scikit-learn和pandas学习线性回归
ps:红酒数据集分析请看下篇。
阅读全文
0 0
- 【自然语言处理入门】03:利用线性回归对数据集进行分析预测(上)
- 【自然语言处理入门】03:利用线性回归对数据集进行分析预测(下)
- 【自然语言处理入门】01:利用jieba对数据集进行分词,并统计词频
- 利用python进行数据分析 移动数据系数与线性回归(P366)
- 数据挖掘-diabetes数据集分析-糖尿病病情预测_线性回归_最小平方回归
- 【spark】使用线性回归对葡萄酒质量进行预测
- 自行编写线性回归对房价进行预测
- 利用R进行多元线性回归分析
- 基于spark用线性回归(linear regression)进行数据预测
- 分别用普通线性回归、岭回归、Lasso回归对boston房价进行预测,比较效果
- 线性回归分析及预测
- 利用LSTM对股票的收盘价进行回归预测
- 集成模型(回归)对Boston数据进行训练并对数据做出预测
- python 线性回归 预测数据
- 用线性回归进行糖尿病预测
- 利用回归树对Boston房价进行预测,并对结果进行评估
- 利用matlab中的函数进行线性回归分析
- 利用matlab中的函数regress进行线性回归分析
- 代码实现px与dp的单位换算
- 常用图像特征的总结--HARR,HOG,LBP,SIFT,SURF
- 数据结构课程设计代码-家谱管理系统
- IDEA搭建servlet服务器与android客户端通信(二)
- 请编程设计一个登陆界面,要求输入账号和密码(不考虑事件)
- 【自然语言处理入门】03:利用线性回归对数据集进行分析预测(上)
- C语言 关于宏的 ## 与 #
- Android 自己收集的一些有趣的框架(持续更新 2017.12.23)
- Android的设计模式-中介者模式
- jQuery+Ajax+PHP实现异步分页数据显示--js可参考
- leetcode 648. Replace Words 公共前缀
- Error:Failed to find target with hash string 'android-15' 解决办法
- 粒子系统
- datatables插件的应用