目录
sklearn数据集
一、数据集划分
机器学习一般的数据集会划分为两个部分:
- 训练数据:用于训练,构建模型
- 测试数据:在模型检验时使用,用于评估模型是否有效
语法:sklearn.model_selection.train_test_split
- x:数据集的特征值
- y:数据集的标签值
- test_size:测试集的大小,一般为float
- random_state:随机数种子,不同的种子会造成不同的随机 采样结果。相同的种子采样结果相同。
- return:训练集特征值,测试集特征值,训练标签,测试标签 (默认随机取)
二、 数据集获取
语法:sklearn.datasets(加载获取流行数据集)
- datasets.load_*() (获取小规模数据集,数据包含在datasets里)
- datasets.fetch_*(data_home=None) (获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/)
三、sklearn机器学习算法的实现-估计器
在sklearn中,估计器(estimator)是一个重要的角色,分类器和回归器都属于estimator,是一类实现了算法的API
1、用于分类的估计器:
- sklearn.neighbors k-近邻算法
- sklearn.naive_bayes 贝叶斯
- sklearn.linear_model.LogisticRegression 逻辑回归
2、用于回归的估计器:
- sklearn.linear_model.LinearRegression 线性回归
- sklearn.linear_model.Ridge 岭回归
分类算法-k近邻算法(KNN)
一、定义:
如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
二、公式:
两个样本的距离可以通过如下公式计算,又叫欧式距离,比如说,a(a1,a2,a3),b(b1,b2,b3)
三、语法:
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')
- n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数
- algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法:‘ball_tree’将会使用 BallTree,‘kd_tree’将使用 KDTree。‘auto’将尝试根据传递给fit方法的值来决定最合适的算法。 (不同实现方式影响效率)
四、模型调优方法:
1、交叉验证
为了让被评估的模型更加准确可信。将拿到的数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同 的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。
2、网格搜索
通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组 合。每组超参数都采用交叉验证来进行评估,最后选出最优参数组合建 立模型。
语法:sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)对估计器的指定参数值进行详尽搜索
- estimator:估计器对象
- param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}
- cv:指定几折交叉验证
- fit:输入训练数据
- score:准确率
结果分析:
- best_score_:在交叉验证中测试的最好结果
- best_estimator_:最好的参数模型
- cv_results_:每次交叉验证后的测试集准确率结果和训练集准确率结果
五、k-近邻算法优缺点
优点: 简单,易于理解,易于实现,无需估计参数,无需训练
缺点: 懒惰算法,对测试样本分类时的计算量大,内存开销大 必须指定K值,K值选择不当则分类精度不能保证
使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试
六、案例:预测入住位置
from sklearn.mo