Python机器学习实战项目--预测红酒质量(超详细)

Scikit-Learn(sklearn)建立模型

1 环境搭建

 Python 3+NumPy+Pandas+Scikit-Learn (sklearn)

2 导入库和模块

Numpy比Python自身的嵌套列表(nested list structure)结构要高效的多的一种开源的数值计算扩展。NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。

Pandas(Python Data Analysis Library是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  1. import numpy as np
  2. import pandas as pd
  3. from sklearn.model_selection import train_test_split
  4. from sklearn import preprocessing
  5. from sklearn.ensemble import RandomForestRegressor
  6. from sklearn.pipeline import make_pipeline
  7. from sklearn.model_selection import GridSearchCV
  8. from sklearn.metrics import mean_squared_error,r2_score
  9. from sklearn.externals import joblib

3  导入红酒数据

Pandas为我们提供了可以读取来自CSV、SQL、SAS等格式的数据的方法

这里我们用其中的read_csv( )方法,可以读取任何CSV文件,包括来自URL 的

  1. dataset_url = 'http://mlr.cs.umass.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv'
  2. data = pd.read_csv(dataset_url)

4  把数据分解为训练集和测试集

首先,我们将我们的目标特征y与我们的输入特征X分开,然后我们利用Scikit-Learn的train_test_split函数

设置20%的数据作为测试数据

  1. y = data.quality
  2. X = data.drop( 'quality', axis= 1)
  3. X_train, X_test, y_train, y_test = train_test_split(X, y,
  4. test_size= 0.2,
  5. random_state= 123,
  6. stratify=y)

5  声明数据预处理步骤

第三步得到的数据的精度是不一样的,所以要把它们标准化。

标准化是机器学习任务的常见要求,许多算法都假设所有特征都以零为中心并具有大致相同的方差。

一个建模流水线,首先使用StandardScaler()转换数据,然后使用随机森林回归器RandomForestRegressor()拟合模型。

  1. pipeline = make_pipeline(preprocessing.StandardScaler(),
  2. RandomForestRegressor(n_estimators= 100))

6  声明超参数

超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。如下所见,格式应该是Python字典(键值对的数据结构),其中键是超参数名称,值是要尝试的设置列表,值的选项可以在文档页面找到。

  1. hyperparameters = { 'randomforestregressor__max_features' : ['auto', 'sqrt', 'log2'],
  2. 'randomforestregressor__max_depth': [ None, 5, 3, 1]}

7  模型调优

交叉验证(Cross-validation)是一种通过使用相同方法多次训练和评估您的模型来可靠地估计构建模型的方法的性能的过程。

  1. clf = GridSearchCV(pipeline, hyperparameters, cv=10)
  2. clf.fit(X_train, y_train)

8  评估模型并预测

y_pred = clf.predict(X_test)
  1. print r2_score(y_test, y_pred)
  2. print mean_squared_error(y_test, y_pred)

完整代码

  1. # -*- coding: utf-8 -*-
  2. import numpy as np
  3. import pandas as pd
  4. from sklearn.model_selection import train_test_split
  5. from sklearn import preprocessing
  6. from sklearn.ensemble import RandomForestRegressor
  7. from sklearn.pipeline import make_pipeline
  8. from sklearn.model_selection import GridSearchCV
  9. from sklearn.metrics import mean_squared_error,r2_score
  10. from sklearn.externals import joblib
  11. #导入数据
  12. dataset_url = 'http://mlr.cs.umass.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv'
  13. data = pd.read_csv(dataset_url,sep = ';')
  14. #print(data.describe())
  15. #把数据分为训练集和测试集
  16. y = data.quality
  17. X = data.drop( 'quality',axis = 1)
  18. X_train,X_test,y_train,y_test = train_test_split(X,y,
  19. test_size= 0.2,
  20. random_state= 123,
  21. stratify=y)
  22. #声明数据预处理步骤
  23. pipeline = make_pipeline(preprocessing.StandardScaler(),
  24. RandomForestRegressor(n_estimators= 100))
  25. #声明超参数
  26. hyperparameters = { 'randomforestregressor__max_features' : [ 'auto', 'sqrt', 'log2'],
  27. 'randomforestregressor__max_depth':[ None, 5, 3, 1]}
  28. #优化模型
  29. clf = GridSearchCV(pipeline,hyperparameters,cv= 10)
  30. clf.fit(X_train,y_train)
  31. #评估模型及预测
  32. pred = clf.predict(X_test)
  33. print(r2_score(y_test, pred))
  34. print(mean_squared_error(y_test, pred))

详见:https://elitedatascience.com/python-machine-learning-tutorial-scikit-learn

  • 20
    点赞
  • 260
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值