机器学习模型实例及其应用

机器学习模型及其应用

本次以房价预测项目为例。

一、明确机器学习的目的

  1. 理解问题:了解数据集中每个变量特征的含义以及对最终目的的重要程度

  2. 理解主要特征:项目目的变量。在本次项目中主要特征为----房价

    # 导入需要的模块
    import pandas as pd
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 用来绘图的,封装了matplot
    # 要注意的是一旦导入了seaborn,
    # matplotlib的默认作图风格就会被覆盖成seaborn的格式
    import seaborn as sns       
    
    from scipy import stats
    from scipy.stats import  norm
    from sklearn.preprocessing import StandardScaler
    import warnings
    warnings.filterwarnings('ignore')
    data_train = pd.read_csv("../input/train.csv")
    data_train['SalePrice'].describe()
    

在这里插入图片描述

二、 数据集特征选取

1.箱线图

箱线图的判断方法

对每个特征与目的特征进行箱线图判断,一般选取特征量属性比较少的特征

# CentralAir
var = 'CentralAir'
data = pd.concat([data_train['SalePrice'], data_train[var]], axis=1)
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000)
plt.show()

在这里插入图片描述

# YearBuilt boxplot
var = 'YearBuilt'
data = pd.concat([data_train['SalePrice'], data_train[var]], axis=1)
f, ax = plt.subplots(figsize=(26, 12))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000)
plt.show()

在这里插入图片描述

2.点线图

对每个特征与目的特征进行点线图判断,一般选取特征量属性比较多的特征

# YearBuilt  scatter
var = 'YearBuilt'
data = pd.concat([data_train['SalePrice'], data_train[var]], axis=1)
data.plot.scatter(x=var, y="SalePrice", ylim=(0, 800000))
plt.show()

在这里插入图片描述

3.关系矩阵

得到各个特征之间的关系矩阵(correlation matrix)

corrmat = data_train.corr()
f, ax = plt.subplots(figsize=(20, 9))
sns.heatmap(corrmat, vmax=0.8, square=True)
plt.show()

在这里插入图片描述

目的变量的关系矩阵

k  = 10 # 关系矩阵中将显示10个特征
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
cm = np.corrcoef(data_train[cols].values.T)
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, cbar=True, annot=True, \
                 square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values)
plt.show()

在这里插入图片描述

关系点图

sns.set()
cols = ['SalePrice','OverallQual','GrLivArea', 'GarageCars','TotalBsmtSF', 'FullBath', 'TotRmsAbvGrd', 'YearBuilt']
sns.pairplot(data_train[cols], size = 2.5)
plt.show()

在这里插入图片描述

三、数据预处理

1.数据处理

数据集中数据一般存在问题,通常采用三种策略

  1. 不采用策略

  2. 标准化

    from  sklearn import preprocessing
    #使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化
    X_scaled=preprocessing.scale(X)
    #使用sklearn.preprocessing.StandardScaler类,使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。
    x_scaled = preprocessing.StandardScaler().fit_transform(x)
    y_scaled = preprocessing.StandardScaler().fit_transform(y.reshape(-1,1))
    
  3. 正则化

    from  sklearn import preprocessing
    #使用preprocessing.normalize()函数对指定数据进行转换
    X_normalized = preprocessing.normalize(X, norm='l2')
    #使用processing.Normalizer()类实现对训练集和测试集的拟合和转换
    normalizer = preprocessing.Normalizer().fit(X) 
    

2.数据集划分

​ 一般采用8、2划分

from sklearn.model_selection import train_test_split
X_train,X_test, y_train, y_test = train_test_split(x_scaled, y_scaled, test_size=0.33, random_state=42)

四、模型选取及其训练

sklearn集成了大部分的机器学习模型,我们只需求进行模型选择和训练调参,一般采用多个模型进行训练比较结果

#随机森林
from sklearn.ensemble import RandomForestRegressor
#支持向量机和贝叶斯线性回归
from sklearn import  linear_model,svm,gaussian_process
clfs = {
        'svm':svm.SVR(), 
        'RandomForestRegressor':RandomForestRegressor(n_estimators=400),
        'BayesianRidge':linear_model.BayesianRidge()
       }
for clf in clfs:
        #模型.fit()训练
        clfs[clf].fit(X_train, y_train)
        #模型.predict()预测
        y_pred = clfs[clf].predict(X_test)
        print(clf + " cost:" + str(np.sum(y_pred-y_test)/len(y_pred)) )
   

五、模型评估

使用评估指数来进行模型评估

回归问题的常用评估指数为:MSE 、MAE、RMSE、R2

![2](C:\Users\28674\Desktop\2.png)from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
mse = mean_squared_error(y_test,predictions)
mae = mean_absolute_error(y_test,predictions)
rmse = math.sqrt(mse)
r2_score = r2_score(y_test,predictions)
print("mse:",mse)
print("mae:",mae)
print("Rmse:",rmse)
print("r2:",r2_score)

如果我们想要查看真实与预测的对比。我们需要绘制对比图线

import matplotlib.pyplot as plt
temp = [i for i in range(1,52)]
plt.plot(temp,y_test,'o--',label = "actual")
plt.plot(temp,predictions,'o--',label = "predict")
plt.legend()
plt.show()

在这里插入图片描述

六、参考

kaggle入门项目https://www.kaggle.com/marsggbo/kaggle

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值