机器学习学习笔记(一)
一、下载数据及加载数据
- 下载数据:可以写一个函数,或者手动下载数据
- 加载数据:可以使用pandas加载数据,该函数返回一个包含所有数据的pandas DataFrame对象。
二、查看数据结构
- 可以使用DataFrame的head方法查看前几行
- 通过info()方法可以快速获取数据集的简单描述,特别是总行数、每个属性的类型和非空值的数量
- 可以使用value_counts()方法查看有多少种分类存在,每种类别下分 别有多少个区域
- 可以使用value_counts()方法查看有多少种分类存在,每种类别下分 别有多少个区域
- 用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,可以处理所有的列。
六、选择和训练模型
-
训练一个线性回归模型 LinearRegression
-
我们可以使用Scikit-Learn mean_squared_error()函数来测量整个训练集上回归模型的RMSE
-
试一试决策树模型DecisionTreeRegressor,他能从数据中找到复杂的非线性关系。
-
使用交叉验证进行评估决策树
- 使用train_test_split函数将训练集分为较小的训练集和验证集,根据这些较小的训练集和训练模型
- 使用Scikit-Learn的K-折交叉验证功能,这个功能更倾向于使用效用函数(越大越好)而不是成本函数(越小越好)
-
试一试随机森林模型RandomForestRegressor
-
通过Python的pickle模块或joblib库,你可以轻松保存Scikit-Learn模型,这样可以更有效地将大型NumPy数组(可以用pip安装)序列化
七、微调模型
1、网格搜索 GridSearchCV
- 只要告诉他你要进行实验的超参数是什么,以及需要尝试的值,它将会使用交叉验证来评估超参数值的所有可能组合
- 换句话说:会自动查找是否添加不确定的特征,比如是否使用某个转换器的超参数。还可以自动寻找处理问题的最佳方法,例如处理异常值、缺失特征、以及特征选择
2、随机搜索 RandomizedSearchCV
- 如果超参数的搜索范围非常大时,会使用随机搜索。
- 它不会尝试所有可能的组合,而是在每次迭代中为每个超参数选择一个随机值,然后对一定数量的随机组合进行评估
3、集成方法:将表现最优的模型组合起来