前言
实际上,sklearn不算是我第一次接触的东西。但这么久过去了,该忘的知识都忘得七七八八,再加上新电脑才装上python,记录一下环境配置和注意事项也是极好的。
IDE:vscode,数据集:Iris数据集,语言:python
python与sklearn环境配置
python环境配置
使用的编辑器是vscode,下载官方最新的python,安装时勾选path选项。
随后在vscode中下载python拓展。
新建文件夹打印hello world
,解释器工作正常。
Sklearn配置
在python命令行窗口中输入:
1 | pip install scikit-learn |
双手离开键盘,等待程序自动加载。
安装时若出现权限不够的问题:
1 ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。在代码中加入
--user
,再次下载即可
KNN算法
KNN简介
- 中文名为:K最邻近法
- 适用于:样本量较大的自动分类
- 不足:计算量大,样本不平衡时有误差
KNN思想
如果一个样本在样本空间内K个最相邻的样本大多数属于一类,那么认为它也属于那一类。
“如果一个动物走起来像鸭子,看起来像鸭子,叫起来像鸭子,那么它就是鸭子”
KNN实现方式
- 在样本空间内,对一个测试样本到其他样本的距离进行计算
- 对这些距离排序,取离它最近的k个点
- 获得这k个样本的类别,将测试样本归入k个点中出现次数最多的那一类
代码中函数简介
load_iris()
属于sklearn内置函数,用于获得iris数据集
上属: sklearn.datasets
下属:
- load_iris.keys():查询关键字
- load_iris.data():数据集特征集(x)
- load_iris.target():数据集标签集(y/label)
- 其他各种信息
train_test_split(···)
sklearn内置函数,用于划分数据为测试/训练
输入依次为:data(特征集),target(标签集),test_size=?(浮点数,表示测试数据占比),random_state=?(随机数种子,0或缺省表示每次随机),stratify=?(是否保持划分前的分类,暂时用不到,可缺省 )
输出依次为:x_train,x_test,y_train,y_test
上属:sklearn.model_selection
KNeighborsClassifier(k)
sklearn内置函数,用于进行KNN相关操作,k为相邻的样本量,建议设为奇数。
输出为构建的模型
上属:sklearn.neighbors
下属:
- 本身:构建待训练的模型
- fit(x_train,y_train):训练模型,参数为训练数据的x,y
- predict(x_test):根据训练的模型,对测试数据进行预测,x_test为测试数据的x,输出预测的y
- score(x_test,y_test):直接根据测试数据对模型打分
- 其他
accuracy_score(···)
sklearn内置函数,用于对两个标签集(y)比较打分
输入:两个待比较的标签集
输出:分数
上属:sklearn.metrics
注意:直接import具体的库中函数,而不是import sklearn可能会更好,否则可能出现无法识别函数的情况(sklearn库中的东西太多了)
例如:
1
2
3 from sklearn import metrics
#使用:
print("score:",metrics.accuracy_score(lab_test,lab_pre))
代码部分
将执行部分包装成main函数确实可能更好:
1
2 if __name__ == '__main__':
main()
观察数据集结构:
执行代码:
1 | def load_data(): |
显示如下:
1 | 数据结构: |
主体函数
根据数据集结构,编写数据拆分,模型训练及打分代码如下:
1 | def load_data(): |
显示如下:
1 | score: 0.9555555555555556 |
说明执行成功。
最后贴上完整代码:
1 | from sklearn import neighbors |