目录

  • 一、前言
  • 二、简单介绍头文件
    • 1、sklearn头文件
      • 意外
    • 2、其他头文件
  • 三、题目理解
    • 1、题目的简单介绍
    • 2、属性标签
    • 3、降维比喻
  • 四、代码
    • 1、代码及注释
    • 2、代码缺点
  • 五、运行结果

一、前言

看我前几篇文章的小伙伴都知道,最近一直在学习机器学习相关内容

学校里也开了这门课,有个很经典的作业就是利用机器学习知识预测波士顿房价

网上也有非常多相关介绍,但是一个个函数及参数我是真的不明白啥意思

索性干脆就自己学完写一个初学者也能很好上手的代码

不过还是需要对读者提些要求:

1、需要简单了解python基础知识
2、会简单使用pycharm或者jupyter notebook
3、知道添加三方头文件的方法
4、简单知道线性回归是干嘛的

第三条不太清楚的可以看我这篇文章

话不多说直接开始

二、简单介绍头文件

from sklearn.datasets import load_boston
from sklearn.model_selection import learning_curve
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import ShuffleSplit
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

1、sklearn头文件

一般python编辑器是不自带这个,需要自己下载

管理员身份运行cmd

pip install sklearn

提示安装成功就行

意外

题主执行pip指令是老是报错,以为是网速的问题

换用conda进行

结果还是非法报错

ValueError: check_hostname requires server_hostname

后来才发现是网络代理开着

关上就行

2、其他头文件

numpy和pandas这两个用于分析数据的头文件基本上都是不不分家

matplotlib头文件就是用来绘图的

也用pip基本上就行

pip install numpy
pip install pands
pip install matplotlib

如有报错直接百度

有参考我这篇文章使用手动和半自动方法的话一定要注意你python版本号和电脑是多少位的

三、题目理解

1、题目的简单介绍


想参考全部的数据可以访问这个网站

简单的数据展示:

2、属性标签

共有13个属性标签(feature)和1个预测目标(target)

CRIM per capita crime rate by town
ZN proportion of residential land zoned for lots over 25,000 sq.ft.
INDUS proportion of non-retail business acres per town
CHAS Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
NOX nitric oxides concentration (parts per 10 million)
RM average number of rooms per dwelling
AGE proportion of owner-occupied units built prior to 1940
DIS weighted distances to five Boston employment centres
RAD index of accessibility to radial highways
TAX full-value property-tax rate per $10,000
PTRATIO pupil-teacher ratio by town
B 1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town
LSTAT % lower status of the population
MEDV Median value of owner-occupied homes in $1000’s

代码中我任选三个属性特征(feature)来预测房价(target)

当然理论上13个特征全选预测出来的房价会更准确了

但先把简单的都弄会了再把其他特征都加进去

3、降维比喻

假如我们在宠物店相中了一条狗,想猜猜他值多少钱,这个时候会找一些因素来判断狗狗是贵还是划算还是便宜,比如我列举了些因素:

颜色:可能黑色和黄色比较贵,杂色便宜
疫苗:打了疫苗会比没打疫苗贵,疫苗分为便宜和贵
听话与否:接受过训练比没接收过可能要贵
性格:活泼的更讨人喜欢
年龄:年龄小的更容易被顾客接受
血统:纯血或者父母都是品种纯净比混血更贵

如果只看颜色的话,大概能预测出一个价位

如果参考颜色和血统,又会得出一个价位

以此类推,如果考虑所有条件,那得出的价位更接近真实价格

这些因素就对应这波士顿房价的13个特征属性(feature)

狗狗的价位也对应着波士顿的房价(target)

四、代码

1、代码及注释

from sklearn.datasets import load_boston
from sklearn.model_selection import learning_curve
from sklearn.linear_model import LinearRegression
import pandas as pd
import numpy as np
from sklearn.model_selection import ShuffleSplit
import matplotlib.pyplot as pltboston = load_boston()                      # 加载boston数据X = boston.data                             # data为数据中的13个特征数据的所有值
Y = boston.target                           # target为数据中的想要预测的目标数据
# print(X.shape)                              # 训练向量,包括样本数量和特征的数量两个参数
#print(boston.keys())                        # boston的属性。输出结果dict_keys(['data', 'target', 'feature_names', 'DESCR', 'filename', 'data_module'])df = pd.DataFrame(boston.data,columns=boston.feature_names)        # 以feature_names作为列名,把data填充到矩阵中,得到boston的数据
df['target'] = pd.Series(boston.target)     # 把target内容以列的形式保存在df的target中
print(df.head())                            # 只读取df中前五行数据,默认为五行features = df[['CRIM','RM','LSTAT']]        # 选取三个特征
print(features.describe())                  # 显示数量统计(count),均值(mean),标准差(std),最小值(min),四分位数(25%,50%,75%),最大值(max)target = df['target']                       # 取出target的数值split_num = int(len(features)*0.7)          # 切割数据集,train占0.7,test占0.3X_train = features[:split_num]              # X_train取前70%部分的数据
Y_train = target[:split_num]                # Y_train取前70%部分的数据X_test = features[split_num:]               # X_test取后30%部分的数据
Y_test = target[split_num:]                 # Y_test取后30%部分的数据model = LinearRegression()                  # 使用线性回归
model.fit(X_train,Y_train)                  # 构建模型,调用fit训练
print('权重:',model.coef_,                   # 打印系数θ1,θ2,θ3和截距θ0'\n','偏置:',model.intercept_)              # 拟合直线f = θ1*x1+θ2*x2+θ3*x3+θ0# x1,x2,x3分别对应特征'CRIM','RM','LSTAT'# model.coef_输出模型权重θ1,θ2,θ3# model.intercept_输出模型的偏置θ0征'CRIM','RM','LSTAT'
preds = model.predict(X_test)               # 用测试集测试得到预测结果
print(preds)                                # 输出预测值def mae_value(y_true,y_pred):               # 计算MAE,传递参数分别为真实值和预测值n = len(y_true)mae = sum(np.abs(y_true - y_pred)) / nreturn maedef mse_value(y_true,y_pred):               # 计算MSEn = len(y_true)mse = sum(np.square(y_true - y_pred)) / nreturn msemae = mae_value(Y_test.values,preds)        # values返回列表中所有的值
mse = mse_value(Y_test.values,preds)
print("MAE:",mae)
print("MSE:",mse)def plot_learning_curve(plt,estimator,title,X,Y,ylim = None,cv = None,n_jobs=1,train_sizes=np.linspace(.1,1.0,5)):   # 封装学习曲线函数#estimator为使用的分类器。#X为传入的矩阵(feature)#Y传入的特征属性(target)#ylim定义y轴取值范围#cv默认使用3折交叉验证#n_jobs并行运行的作业数#train_sizes训练样本的相对或绝对的数字plt.title(title)                                    # plt.title设置图像标题if ylim is not None:plt.ylime(*ylim)plt.xlabel("Training example")                      # 设置x和y轴的标题plt.ylabel("Score")                                 # 设置x和y轴的标题train_sizes,train_scores,test_scores = learning_curve(estimator, X, Y, cv = cv, n_jobs = n_jobs,train_sizes = train_sizes)train_scores_mean = np.mean(train_scores, axis=1)   # 平均值train_scores_std = np.std(train_scores, axis=1)     # 标准差test_scores_mean = np.mean(test_scores, axis=1)     # 平均值test_scores_std = np.std(test_scores, axis=1)       # 标准差plt.grid()                                          # 生成网格线plt.fill_between(train_sizes, train_scores_mean - train_scores_std, train_scores_mean + train_scores_std, alpha=0.1,color="r")                         # 曲线下面覆盖成红色plt.fill_between(train_sizes, test_scores_mean - test_scores_std, test_scores_mean + test_scores_std, alpha=0.1,color="g")                         # 曲线下面覆盖成绿色plt.plot(train_sizes, train_scores_mean, 'o--', color="r", label="Training score")          # 显示红色曲线plt.plot(train_sizes, test_scores_mean, 'o-', color="g", label="Cross-validation score")    # 显示绿色曲线plt.show()                                          # 在pycharm里取消注释plt.legend(loc="best")                              # 图例位置放在合适(best)位置return pltcv = ShuffleSplit(n_splits=10,test_size=0.2,random_state=0)     # 交叉验证的参数
plt.figure(figsize=(10,6))                              # 指定figure的高和宽
plot_learning_curve(plt,model,"Learn Curve fore LinearRegression",features,target,ylim=None,cv=cv)# 画出学习曲线

2、代码缺点

因为着急写出来,所以只封装了MAE、MSE与学习曲线函数

所以不用大家太多的跳转着读代码

基本上从上往下读就ok

等有机会在更新下封装起来的全部代码

五、运行结果

直接上图吧

虚线:针对训练数据集拟合的准确性

实线:针对交叉验证数据集拟合的准确性

如果依然有不懂的同学可以直接评论或私我

完事!!!

机器学习作业之波士顿房价(boston)数据分析与绘图(注释我都写了这么多,我不信你还看不懂?)相关推荐

  1. 【人工智能项目】机器学习热门项目-波士顿房价

    [人工智能项目]机器学习热门项目-波士顿房价 1.数据概览分析 1.1 数据概览 本次提供: train.csv,训练集: test.csv,测试集: submission.csv 真实房价文件: 训 ...

  2. 机器学习入门实战---波士顿房价预测

    波士顿房价预测 波士顿房价数据集介绍 波士顿房价数据说明:此数据源于美国某经济学杂志上,分析研究波士顿房价( Boston HousePrice)的数据集.数据集中的每一行数据都是对波士顿周边或城镇房 ...

  3. 机器学习项目实践——波士顿房价预测

    基于线性回归预测波士顿房价 摘要:分类和回归属于机器学习领域有监督学习算法的两种方法,有监督学习是通过已有的训练样本去训练得到一个模型,再使用这个模型将所有的输入映射到相应的输出,若输出结果是离散型称 ...

  4. 机器学习项目-预测波士顿房价-整体流程

    项目 1: 预测波士顿房价¶ 第一步. 导入数据 在这个项目中,你将利用马萨诸塞州波士顿郊区的房屋信息数据训练和测试一个模型,并对模型的性能和预测能力进行测试.通过该数据训练后的好的模型可以被用来对房 ...

  5. MOOC网深度学习应用开发1——Tensorflow基础、多元线性回归:波士顿房价预测问题Tensorflow实战、MNIST手写数字识别:分类应用入门、泰坦尼克生存预测

    Tensorflow基础 tensor基础 当数据类型不同时,程序做相加等运算会报错,可以通过隐式转换的方式避免此类报错. 单变量线性回归 监督式机器学习的基本术语 线性回归的Tensorflow实战 ...

  6. Python机器学习/数据挖掘项目实战 波士顿房价预测 回归分析

    Python机器学习/数据挖掘项目实战 波士顿房价预测 回归分析 此数据源于美国某经济学杂志上,分析研究波士顿房价( Boston HousePrice)的数据集. 在这个项目中,你将利用马萨诸塞州波 ...

  7. 机器学习实战二:波士顿房价预测 Boston Housing

    波士顿房价预测 Boston housing 这是一个波士顿房价预测的一个实战,上一次的Titantic是生存预测,其实本质上是一个分类问题,就是根据数据分为1或为0,这次的波士顿房价预测更像是预测一 ...

  8. ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)+预测新数据得分

    ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集[13+1,506]进行回归预测(房价预测)+预测新数据得分 导读 本文章基于前边的一篇文章,对13种机器学习的回归模型性能比较 ...

  9. ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)来比较各模型性能

    ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集[13+1,506]进行回归预测(房价预测)来比较各模型性能 导读 通过利用13种机器学习算法,分别是LiR.kNN.SVR.D ...

最新文章

  1. 欧盟调查或拖累进程 高通收购NXP一波三折
  2. python多态的概念_Python 多态
  3. 如何在程序中添加iAd广告
  4. wireshark源代码分析
  5. 用python建云盘_超简单!基于Python搭建个人“云盘”
  6. H5动效的常见制作手法
  7. 查普曼-科莫高洛夫方程Chapman–Kolmogorov equation
  8. android root测试,[原创]安卓逆向之绕过root检测的四种姿势
  9. 鼠标离开 表格隐藏html,excel中滚动鼠标表格隐藏怎么取消
  10. 深度学习之epoch
  11. 终极解锁邮件签名证书(S/MIME证书)
  12. 在windows11上安装cuda,cudnn,以及GPU版的pytorch
  13. 如何快速掌握技术和知识点
  14. java初始化含十个数的数组_java初始化数组的方法
  15. 中国人工智能公司十强排行榜新鲜出炉
  16. OTFS-SCMA学习笔记
  17. android gif编辑,GIF编辑
  18. 双显卡只用独显好吗_显卡有什么作用 独显和双显卡笔记本哪个好【详解】
  19. C语言编写规范之注释
  20. 魅色U盘精灵(U盘加密.文档同步.计算机锁定)

热门文章

  1. 轻松入门Android直播相关技术 从0搭建直播系统
  2. 如何在拍照时摆POSS
  3. tensorflow的数据读取 tf.data.DataSet、tf.data.Iterator
  4. Unity3D数字孪生开发笔记——网络篇
  5. ESP8266-01实战一——带OLED显示屏电子时钟
  6. Facebook广告投放策略与优化Facebook广告成效的技巧方式
  7. 在idea中如何设置项目编码为UTF-8?
  8. 国潮复兴——从红旗H9看HMI设计中的东方美学
  9. maven多模块编译子包
  10. Linux下开启FTP的21端口