python实现机器学习笔记
#课程链接 https://www.imooc.com/video/20165
一、机器学习介绍以及环境部署
1、机器学习介绍及其原理
1)什么是人工智能
人工智能就其本质而言,是机器对人的思维信息过程的模拟,让它能像人一样思考。根据输入信息进行模型结构、权重更新,实现最终优化
特点:信息处理、自我学习、优化升级。
2)核心方法
机器学习:一种实现人工智能的方法,使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。比如垃圾邮件检测、房价预测。
深度学习:一种实现机器学习的技术,模仿人嘞神经网络,建立模型,进行数据分析。比如人脸识别、语义理解、无人驾驶。
3)主要类别
监督学习:基于数据及结果进行预测。一组输入数据对应一个正确的输出结果
非监督学习:从数据中挖掘关联性。不存在“正确的”答案
4)基本原理
监督学习核心步骤:1)使用标签数据训练机器学习模型;2)调用训练好的机器学习模型,根据新的输入数据预测对应的结果
非监督学习:不需要标签数据,而是通过引入预先设定的优化准则进行模型训练,比如自动将数据分为三类
2、机器学习开发环境部署
1)python介绍
python是一种解释性的、面向对象的、移植性强的高级程序设计语言。
2)scikit-learn介绍
python语言中专门针对机器学习而发展起来的一款开源框架,可以实现数据预处理、分类、回归、降维、模型选择等常用的机器学习算法
3)Jupyter notebook介绍
它是一个开源的web应用程序,旨在方便开发者创建和共享代码文档。
4)环境部署
#第一步,安装python https://www.python.org/ #第二步,安装Anaconda https://www.anaconda.com/ #第三步,新建开发环境、安装numpy、scikit-learn库 conda create -n env_name pip(conda) install package_name -i source_address
#第四步,Jupter notebook界面优化
https://github.com/dunovank/jupter-themes
二、机器学习编程实战
3、机器学习实现之数据预处理
1)Iris数据集
Iris鸢尾花数据集是一个经典数据集,属于监督式学习应用:根据花的四个特征预测鸢尾花卉属于哪一品种。
2)使用scikit-learn进行数据处理的关键
区分属性数据与结果数据;属性数据与结果数据都是量化的;运算过程中,属性数据与结果数据的类型都是Numpy数组;属性数据与结果数据的维度是对应的
3)代码
#iris数据加载 from sklearn import datasets iris = datasets.load_iris() 展示iris数据 print(iris.data) print(iris.feature_names) print(iris.target) print(iris.target_names) print(type(iris.data)) print(type(iris.target)) print(iris.data.shape) #x输入数据赋值,y输出数据赋值 x = iris.data y = iris.target print(x) print(y)
4、机器学习实现之模型训练
1)分类问题介绍
定义:根据数据集目标的特征或属性,划分到已有的类别中,常用的分类算法:KNN、逻辑回归、决策树、朴素贝叶斯
2)KNN模型
给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最相邻的k个实例,这k个实例的多数属于某个类,就把该输入实例分类到这个类中
3)代码
#导入iris数据集 from sklearn import datasets iris = datasets.load_iris() #样本数据与结果分别赋值到x,y x = iris.data y = iris.target #确认样本与输出数据维度 print(x.shape) print(y.shape) ''' 使用scikit-learn建模四步骤 1、调用需要使用的模型类 2、模型初始化 3、模型训练 4、模型预测 ''' from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors=1) print(knn) knn.fit(x,y) knn.predict([[1,2,3,4]]) x_test = [[1,2,3,4],[2,4,1,2]] knn.predict(x_test) #可设置新的k值
5、机器学习实现之模型评估(一)
1)评估流程
<1>将整个数据集用于训练与测试:1'使用整个数据集进行模型训练;2'使用相同的数据集进行测试,并通过对比预测结果与实际结果来评估模型表现
准确率:正确预测的比例;用于评估分类模型表现的常用指标
缺点:1'训练模型的最终目标是为了预测新数据对应的结果;2'最大化训练准确率通常会导致模型复杂化(比如增加维度),因此将降低模型的通用性;3'过度复杂模型容易导致训练数据的过度拟合
<2>分离训练数据与测试数据:1'把数据分成两部分:训练集、测试集;2'使用训练集数据进行模型训练;3'使用测试集数据进行预测,从而评估模型表现
优点:1'可实现在不同数据集上进行模型训练和预测;2'建立数学模型的目的是对新数据的预测,基于测试数据计算的准确率能有效地评估模型表现
2)模型关键参数选择
目标:确定合适的参数组,提高模型预测准确率
方法:
1、遍历参数组合,建立对应的模型
2、使用训练集数据进行模型训练
3、使用测试集数据进行预测,评估每个模型表现
4、通过图形展示参数组与准确率的关系,确定合适的参数组
3)代码
#将整个数据集用于训练与测试
#数据加载 模型训练与预测 from sklearn import datasets iris = datasets.load_iris() x = iris.data y = iris.target from sklearn.neighbors import KNeighborsClassifier knn_5 = KNeighborsClassifier(n_neighbors= 5) knn_5.fit(x,y) y_pred = knn_5.predict(x) print(y_pred) print(y_pred.shape) #准确率计算 from sklearn.metrics import accuracy_score print(accuracy_score(y, y_pred)) #KNN(K=1) knn_1 = KNeighborsClassifier(n_neighbors = 1) knn_1.fit(x, y ) y_pred = knn_1.predict(x) print(accuracy_score(y, y_pred))
#分离训练数据与测试数据 #数据分离 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x, y, test_size =0.4) #分离后数据集的维度确认 print(x_train.shape,x_test.shape,y_train.shape,y_test.shape) #分离后数据集的训练与评估 knn_5_s = KNeighborsClassifier(n_neighbors = 5) knn_5_s.fit(x_train, y_train) y_train_pred = knn_5_s.predict(x_train) y_test_pred = knn_5_s.predict(x_test) #分离后模型预测的准确率 print(accuracy_score(y_train,y_train_pred)) print(accuracy_score(y_test,y_test_pred))
6、机器学习实现之模型评估(二)