机器学习极简入门教程(一)

阅读此文,需要有python基础,有英文阅读能力的人点这里

part1

这里不回答机器学习是什么,能做什么,只告诉你如何快速上手。

熟悉你手中的数据。

1.常用模块导入命令

import pandas as pd

2.文件导入命令

FILE_PATH=".CSV后缀文件存放路径"
data = pd.read_csv(FILE_PATH)

3.数据探索命令。这里以房价预测数据为例,这里下载所需数据,提取码:bn9c。

  • 查看数据规模
data.shape
len(data)
  • 查看列名
data.columns
  • 查看列名属性
data.info()
  • 头部数据查看
data.head()
  • 基本统计
data.describe()

其中有:平均值(mean)、标准差(std)、最小值(min)、最大值(max)以及1/4、1/2、3/4分位数(25%、50%、75%)。

筛选数据

1.缺失值处理

data = data.dropna(axis=0)

2.选出预测目标

y = data.Price

3.选出特征。特征可以理解成影响预测结果的要素。如何确定这些要素,这是后面的话题。

data_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']
X = data[data_features]

建模

可以把模型理解成一个黑箱,有入口和出口,入口数据是X,出口数据是y。
1.模型方法引入

from sklearn.tree import DecisionTreeRegressor

模型的选择对预测结果的精确度有很大影响,这里我们先选择决策树模型。你只需要对该模型有个直观的印象。
决策树模型.jpg
2.创建和拟合

model = DecisionTreeRegressor(random_state=1)
model.fit(X,y)

random_state是为了确保每次运行都能得到相同的结果。

part2

模型拟合后关心的问题是模型是否合适。如何度量?我们引入一个新的概念:平均绝对误差(MAE)。

平均绝对误差

1.定义:
MAE解释.png
2. 使用

  • 模块导入
from sklearn.metrics import mean_absolute_error
  • 预测和求MAE
predicted_price = model.predict(X)
mean_absolute_error(y,predicted_price)

细心的你可能会发现,我们在模型拟合和价格预测中用了同一份样本数据X,这显然有些不合理。一个常用的思路是将数据拆分成两部分,分别用来拟合模型和预测结果。

数据拆分

  1. 模块导入
from sklearn.model_selection import train_test_split

2.数据拆分

train_X,val_X,train_y,val_y = train_test_split(X,y,random_state=1)

3.建模、预测和计算MAE

model = DecisionTreeRegressor(random_state =1)

model.fit(train_X,train_y)

val_predictions = model.predict(val_X)

print(mean_absolute_error(val_y,val_predictions))

完整代码示例

第二部分到这里就结束了,我们了解了MAE,并学会了简单的数据拆分方法,下面是完整的代码。

FILE_PATH ="C:\\Users\\Administrator\\Desktop\\kaggle\\data\\"
FILE_INDEX ="melb_data.csv"

import pandas as pd

data = pd.read_csv(FILE_PATH+FILE_INDEX)

y = data.Price

# print(y.shape)

data_features = ['Rooms', 'Bathroom', 'Landsize', 'Lattitude', 'Longtitude']

X = data[data_features]

from sklearn.tree import DecisionTreeRegressor

# model = DecisionTreeRegressor(random_state=0)

# # print(model.fit(X,y))
# model.fit(X,y)

from sklearn.metrics import mean_absolute_error

# predicted_price = model.predict(X)

# print(mean_absolute_error(y,predicted_price))

from sklearn.model_selection import train_test_split

train_X,val_X,train_y,val_y = train_test_split(X,y,random_state=1)

model = DecisionTreeRegressor(random_state =1)

model.fit(train_X,train_y)

val_predictions = model.predict(val_X)

print(mean_absolute_error(val_y,val_predictions))

part3

这部分依旧是对模型验证的讨论。我们会接触到两个新的概念:过拟合(underfitting)和欠拟合(overfitting)。

非官方解释

大白话解释起来就是:照顾数据中的大多数,忽略极少数,这是一种好的拟合;企图去迎合全部数据导致模型预测出现很大偏差,这就是过拟合;仅仅迎合一小部分而忽视大多数,这就是欠拟合。权威解释自行百度。

模拟实验

  1. 你需要知道:
    在scikit-learn 文档中,决策树模型有许多可选配置项,很多重要的配置项都对树的高度(深度)有影响。这里我们只关注参数:max_leaf_nodes
  2. 实验原理:
    通过改变max_leaf_nodes的值来比较MAE大小,从而选择出较适合的参数值。在这个过程中,参数值的改变会导致模型欠拟合或是过拟合。

  3. 完整代码示例:

FILE_PATH ="C:\\Users\\Administrator\\Desktop\\kaggle\\data\\"
FILE_INDEX ="melb_data.csv"

import pandas as pd

data = pd.read_csv(FILE_PATH+FILE_INDEX)

filtered_data = data.dropna(axis=0)

data_features =['Rooms', 'Bathroom', 'Landsize', 'BuildingArea', 
                        'YearBuilt', 'Lattitude', 'Longtitude']

X = filtered_data[data_features]

y = filtered_data.Price


from sklearn.tree import DecisionTreeRegressor

from sklearn.metrics import mean_absolute_error

def get_mae(max_leaf_nodes,train_X,val_X,train_y,val_y):
    model = DecisionTreeRegressor(max_leaf_nodes=max_leaf_nodes,random_state=0)
    model.fit(train_X,train_y)
    preds_val = model.predict(val_X)
    mae = mean_absolute_error(val_y,preds_val)
    return(mae)

from sklearn.model_selection import train_test_split

train_X,val_X,train_y,val_y = train_test_split(X,y,random_state=1)


# compare MAE with differing values of max_leaf_nodes

for max_leaf_nodes in [5,50,500,5000]:
    my_mae = get_mae(max_leaf_nodes,train_X,val_X,train_y,val_y)
    print("Max leaf nodes: %d  \t\t Mean Absolute Error:  %d" %(max_leaf_nodes, my_mae))
  1. 结果图示:
    参数值和MAE变化图示.png

显然500是最佳的参数值。这一部分我们学会了通过比较MAE来确定较合适的参数值,也知道了参数值的不同可能会造成模型过拟合或者欠拟合。下一部分我们回到数据本身,探讨对原始数据的处理。

猜你喜欢

转载自blog.csdn.net/u013408224/article/details/82628598