机器学习学习笔记-第二章

这篇博客介绍了机器学习的基本流程,包括数据下载与加载、数据结构查看、测试集创建、数据可视化和数据预处理。重点讲解了如何处理缺失值、文本分类以及特征缩放,并提到了线性回归、决策树和随机森林模型的训练与评估。此外,还讨论了模型调优的策略如网格搜索和随机搜索,以及模型的保存和加载。
摘要由CSDN通过智能技术生成

机器学习学习笔记(一)

一、下载数据及加载数据

  • 下载数据:可以写一个函数,或者手动下载数据
  • 加载数据:可以使用pandas加载数据,该函数返回一个包含所有数据的pandas DataFrame对象。

二、查看数据结构

  1. 可以使用DataFrame的head方法查看前几行
  2. 通过info()方法可以快速获取数据集的简单描述,特别是总行数、每个属性的类型和非空值的数量
  3. 可以使用value_counts()方法查看有多少种分类存在,每种类别下分 别有多少个区域
  4. 可以使用value_counts()方法查看有多少种分类存在,每种类别下分 别有多少个区域
  5. 用hist()绘制直方图,可以一次绘制一个属性,也可以在整个数据集上调用hist()方法

三、创建测试集

测试集通常是数据集的百分之20
选取测试集的方法:
1、使用最稳定的特征创建唯一标识符,用这个标识符决定该实例是否进入测试集。(例如可以计算每个实例的哈希值,如果这个哈希值小于或等于最大哈希值的20%,那就将该实例放入测试集)
Scikit-Learn提供了一些函数,可以通过多种方式将数据集分成多
个子集。最简单的函数是train_test_split()
2、分层抽样
使用pd.cut()创建5个收入类别属性
根据收入类别进行分层抽样了。使用Scikit-Learn的StratifiedShuffleSplit类

四、数据可视化

1、由于存在精度和纬度,所以创建一个各区域分布图,用plot创建
2、寻找相关性

  • 可以使用corr()方法轻松计算出每对属性之 间的标准相关系数(也称为皮尔逊r)
  • 是使用pandas的scatter_matrix函数,它会绘制出每个数值属性相对于其他数值属性的相关性

五、机器学习算法的数据准备

1、数据清理:对于没有值的属性,可以用三种方式解决:

  • 放弃这些相应的区域。
  • 放弃整个属性。
  • 将缺失的值设置为某个值(0、平均数或者中位数等)。 通过DataFrame的dropna()、drop、和fillna()方法,可以完成以上操作
    Scikit-Learn提供了SimpleImputer类处理缺失值
    使用fit()方法将imputer实例适配到训练数据

2、处理文本和分类属性

  • 将文本转成数字,可以使用Scikit-Lear的OrdinalEncoder类 可以使用Categories_实例变量获取类别列表
  • 独热编码:只用一个属性是1,其他是0。SciKit—Learn提供了一个OneHotEncoder编码器,可以将整数类别值转换为独热向量
  • 但是转换出来的是Scipy稀疏矩阵(稀疏矩阵仅存储非零元素的位置)
    如果想要将Scipy稀疏矩阵转成Numpy数据,调用toarray()就行

3、自定义转换器

  • 创建一个类,应用fit(),transform(),fit_transform()方法。
  • 可以添加一些基类,就能自动获取一些方法,比如TransformerMixin、BaseEstimator

4、特征缩放
两种方法:

  • 最小-最大缩放:将值缩放到0-1之间。实现方法:减去最小值,并除以最大值和最小值的差。Scikit-Learn提供了一个类:MinMaxScaler,可以通过feature_range对范围(0,1)进行更改
  • 标准化:减去平均值,除以方差,使得结果的分布具备单位方差。不同于上面的方法,标准化不会将值绑定到特定范围。Scikit-Learn提供了一个标准化的转换器StandadScaler

5、转换流水线

  • 数据转换需要以正确的步骤执行,Scikit-Learn提供了Pipeline类支持这样的转换
  • 当调用流水线的fit()方法时,会在所有转换器上按照顺序依次调用fit_transform(),将一个调用的输出作为参数传递给下一个调用方法,直到传递到最终的估算器。
  • 在Scikit-Learn0.20版中,引入了ColumnTransformer,可以处理所有的列。

六、选择和训练模型

  1. 训练一个线性回归模型 LinearRegression

  2. 我们可以使用Scikit-Learn mean_squared_error()函数来测量整个训练集上回归模型的RMSE

  3. 试一试决策树模型DecisionTreeRegressor,他能从数据中找到复杂的非线性关系。

  4. 使用交叉验证进行评估决策树

    • 使用train_test_split函数将训练集分为较小的训练集和验证集,根据这些较小的训练集和训练模型
    • 使用Scikit-Learn的K-折交叉验证功能,这个功能更倾向于使用效用函数(越大越好)而不是成本函数(越小越好)
  5. 试一试随机森林模型RandomForestRegressor

  6. 通过Python的pickle模块或joblib库,你可以轻松保存Scikit-Learn模型,这样可以更有效地将大型NumPy数组(可以用pip安装)序列化

七、微调模型

1、网格搜索 GridSearchCV

  • 只要告诉他你要进行实验的超参数是什么,以及需要尝试的值,它将会使用交叉验证来评估超参数值的所有可能组合
  • 换句话说:会自动查找是否添加不确定的特征,比如是否使用某个转换器的超参数。还可以自动寻找处理问题的最佳方法,例如处理异常值、缺失特征、以及特征选择

2、随机搜索 RandomizedSearchCV

  • 如果超参数的搜索范围非常大时,会使用随机搜索。
  • 它不会尝试所有可能的组合,而是在每次迭代中为每个超参数选择一个随机值,然后对一定数量的随机组合进行评估

3、集成方法:将表现最优的模型组合起来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值