机器学习之挖掘melb_data.csv数据
mel_data.csv是关于melb地区房屋的数据##
import pandas as pd
melbourne_file_path = "E:\data\Melbourne Housing Snapshot\melb_data.csv"
melbourne_data = pd.read_csv(melbourne_file_path)  #读数据
melbourne_data.columns  #读取属性名
Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG',
       'Date', 'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Car',
       'Landsize', 'BuildingArea', 'YearBuilt', 'CouncilArea', 'Lattitude',
       'Longtitude', 'Regionname', 'Propertycount'],
      dtype='object')
#这里忽略缺失值
melbourne_data = melbourne_data.dropna(axis=0)
#可以使用点符号来提取变量。这一列存储在一个Series中,它大致类似于只有一列数据的DataFrame。
#我们将使用点符号来选择我们想要预测的列,这称为预测目标。按照惯例,预测目标称为y。
y = melbourne_data.Price  #选取预测目标属性
#筛选变量属性
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
x = melbourne_data[melbourne_features]  #简单清洗后的数据
x.describe()  #数据描述
.dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }
.dataframe tbody tr th {
    vertical-align: top;
}
.dataframe thead th {
    text-align: right;
}
| Rooms | Bathroom | Landsize | Lattitude | Longtitude | |
|---|---|---|---|---|---|
| count | 6196.000000 | 6196.000000 | 6196.000000 | 6196.000000 | 6196.000000 | 
| mean | 2.931407 | 1.576340 | 471.006940 | -37.807904 | 144.990201 | 
| std | 0.971079 | 0.711362 | 897.449881 | 0.075850 | 0.099165 | 
| min | 1.000000 | 1.000000 | 0.000000 | -38.164920 | 144.542370 | 
| 25% | 2.000000 | 1.000000 | 152.000000 | -37.855438 | 144.926198 | 
| 50% | 3.000000 | 1.000000 | 373.000000 | -37.802250 | 144.995800 | 
| 75% | 4.000000 | 2.000000 | 628.000000 | -37.758200 | 145.052700 | 
| max | 8.000000 | 8.000000 | 37000.000000 | -37.457090 | 145.526350 | 
x.head()  #head函数默认取数据集前5行,观察数据集有时能发现惊喜
.dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }
.dataframe tbody tr th {
    vertical-align: top;
}
.dataframe thead th {
    text-align: right;
}
| Rooms | Bathroom | Landsize | Lattitude | Longtitude | |
|---|---|---|---|---|---|
| 1 | 2 | 1.0 | 156.0 | -37.8079 | 144.9934 | 
| 2 | 3 | 2.0 | 134.0 | -37.8093 | 144.9944 | 
| 4 | 4 | 1.0 | 120.0 | -37.8072 | 144.9941 | 
| 6 | 3 | 2.0 | 245.0 | -37.8024 | 144.9993 | 
| 7 | 2 | 1.0 | 256.0 | -37.8060 | 144.9954 | 
#导入sklearn,选择决策树
from sklearn.tree import DecisionTreeRegressor
#定义模型的随机参数以确保每次运行结果相同
melbourne_model = DecisionTreeRegressor(random_state=1)
#创建模型
melbourne_model.fit(x,y)
DecisionTreeRegressor(criterion='mse', max_depth=None, max_features=None,
           max_leaf_nodes=None, min_impurity_decrease=0.0,
           min_impurity_split=None, min_samples_leaf=1,
           min_samples_split=2, min_weight_fraction_leaf=0.0,
           presort=False, random_state=1, splitter='best')
#对训练数据的前几行进行预测(这样做基本没意义,后面我们会看到)
print('对前5行数据做预测')
print(x.head())
print('预测结果是:')
print(melbourne_model.predict(x.head()))
对前5行数据做预测
   Rooms  Bathroom  Landsize  Lattitude  Longtitude
1      2       1.0     156.0   -37.8079    144.9934
2      3       2.0     134.0   -37.8093    144.9944
4      4       1.0     120.0   -37.8072    144.9941
6      3       2.0     245.0   -37.8024    144.9993
7      2       1.0     256.0   -37.8060    144.9954
预测结果是:
[ 1035000.  1465000.  1600000.  1876000.  1636000.]
#上面我们的预测结果出来了,那如何评价我们的模型的预测能力?
#我们很自然的想到将预测结果越接近现实越好,能掐会算、料事如神那更好
#我们可以将预测值与实际值比较,得出一个误差,那这个误差越小就代表预测越准
#我们有很多行数据,我们将这些误差求和做平均就得到一个模型的平均误差
#这个平均误差被称为mean absolute error 平均绝对误差MAE,它是一个简单的评价指标
from sklearn.metrics import mean_absolute_error
predicted_home_prices = melbourne_model.predict(x)
mean_absolute_error(y, predicted_home_prices)
1115.7467183128902
#我们来看看,MAE是1115.7,相比百万级的房价误差很小了,我们的预测很精准?
#是,看起来还不错,但这里预测的是模型已知的数据,这是事后诸葛亮
#把考试原题研究了一波,再去考试那结果能不好吗?
#我们创建模型的目标是什么?我们想要从这些数据中挖掘规律,去预测我们想知道但不知道的东西
#这里我们想知道的东西是房价,所以我们评价模型的预测能力要使用模型未使用过的数据
#就像严格的考试很少出现原题,只有这样才能考出真实水平
#我们的模型评价也要用未使用过的数据才能得出真实的预测能力
#这个未使用过的数据我们称为validation data验证数据,用于验证模型能力
from sklearn.model_selection import train_test_split
# split data into training and validation data, for both features and target
# The split is based on a random number generator. Supplying a numeric value to
# the random_state argument guarantees we get the same split every time we
# run this script.
train_x, val_x, train_y, val_y = train_test_split(x, y, random_state = 0)
# Define model
melbourne_model = DecisionTreeRegressor()
# Fit model
melbourne_model.fit(train_x, train_y)
# get predicted prices on validation data
val_predictions = melbourne_model.predict(val_x)
print(mean_absolute_error(val_y, val_predictions))
274669.096837
#上面我们将数据分为训练数据和测试数据,用训练数据得到的模型去预测测试数据
#wow,MAE已经达到十万级,与百万级的房价相比这个误差是惊人的
#我们看到这个模型考试做原题表现不错,但不考原题就表现极其差
#所以我们测试模型时一定不能、不能、不能用训练数据,我们要用validation data
												
											机器学习之挖掘melb_data.csv数据的更多相关文章
- python机器学习-sklearn挖掘乳腺癌细胞(五)
		
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
 - python机器学习-sklearn挖掘乳腺癌细胞(四)
		
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
 - python机器学习-sklearn挖掘乳腺癌细胞(三)
		
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
 - python机器学习-sklearn挖掘乳腺癌细胞(二)
		
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
 - python机器学习-sklearn挖掘乳腺癌细胞(一)
		
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
 - SQL Server 2016五大优势挖掘企业用户数据价值
		
SQL Server 2016五大优势挖掘企业用户数据价值 转载自:http://soft.zdnet.com.cn/software_zone/2016/0318/3074442.shtml 3月1 ...
 - [moka同学摘录]Yii2 csv数据导出扩展
		
yii2-thecsv(Yii2框架csv数据导出扩展) github: https://github.com/13552277443/yii2-thecsv 1.安装 运行 php composer ...
 - mysql导出csv/excel文件的几种方法,mysql的load导入csv数据
		
方法一 php教程用mysql的命令和shell select * into outfile './bestlovesky.xls' from bestlovesky where 1 order by ...
 - python_如何读写csv数据
		
案例: 通过股票网站,我们获取了中国股市数据集,它以csv数据格式存储 Data,Open,High,Low,Close,Volume,Adj Close 2016-06-28,8.63,8.47,8 ...
 
随机推荐
- js编程思想:模型进化论--JS 的 new 到底是干什么的?
			
想象我们在制作一个策略类战争游戏,玩家可以操作一堆士兵攻击敌方. 我们着重来研究一下这个游戏里面的「制造士兵」环节. 一个士兵的在计算机里就是一堆属性,如下图: 一.荒蛮时代:对象是数据的集合 我们只 ...
 - ES6学习笔记--属性名表达式
			
1.直接用标识符作为属性名: obj.foo = true 2.用表达式作为属性名: obj['a'+'bc'] = 123 //相当于 obj['abc'] = 123 3.ES6 允许字面量定义对 ...
 - Passwords Gym - 101174E (AC自动机上DP)
			
Problem E: Passwords \[ Time Limit: 1 s \quad Memory Limit: 256 MiB \] 题意 给出两个正整数\(A,B\),再给出\(n\)个字符 ...
 - HHHOJ #151. 「NOI模拟 #2」Nagisa
			
计算几何板子题(我才没有拷板子的说--) 众所周知,三角形的重心坐标是\((\frac{x_1+x_2+x_3}{3},\frac{y_1+y_2+y_3}{3})\) 然后我们发现如果我们有一个点集 ...
 - linux 运维基本操作
			
本记录来自腾讯云实验 https://cloud.tencent.com/developer/labs/lab/10000 目录操作 任务时间:5min ~ 10min 创建目录 使用 mkdir ...
 - gcc 编译c++文件
			
#include <stdio.h> //将类定义在命名空间中 namespace Diy{ class Student{ public: char *name; int age; flo ...
 - ModuleNotFoundError: No module named 'suit'
			
ModuleNotFoundError: No module named 'suit' pip3. install suit
 - 2019 第二届 科成安洵杯 官方WriteUp -17网安
			
长文预警:对应源码请加企鹅群获取:861677907 0x01 WEB 1.1 勇闯贪吃蛇大冒险 一进去就看出来是一道web页面JS的小游戏,提示说输入CDUESTC CTF即可闯关成功,但是存在着d ...
 - linux 去掉 ^M 的方法
			
在linux上经常遇到这种问题,从网上下载文件到 linux 上后,就多了很多 ^M这种东西,如何集体删除这种东西呢! 用 vim 打开文件 进行如下设置 将文件格式转化为unix :set ff= ...
 - Server Tomcat v8.5 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
			
Server Tomcat v9.0 Server at localhost was unable to start within 45 seconds. If the server requires ...