一.机器学习的介绍
1.机器学习的定义
机器学习本质上就是让计算机自己在数据中学习规律,并根据所得到的规律对未来数据进行预测。机器学习包括如聚类、分类、决策树、贝叶斯、神经网络、深度学习等算法。
机器学习的基本思路是模仿人类学习行为的过程,如我们在现实中的新问题一般是通过经验归纳,总结规律,从而预测未来的过程,大致可以描述为:通过训练集与新数据让机器进行特征提取与分析,后将结果通过机器学习算法,生成预测模型,在将带有标注的数据给它进行预测
2. 机器学习的发展历史
机器学习的发展更多伴随着数学与算力的提升:在20世纪50年代之前,发现并且改进统计方法;20世纪50年代开始,使用简单算法进行开创性机器学习研究;20世纪60年代在机器学习中引入贝叶斯方法;20世纪80年代开始,反向传播算法使得机器学习研究进入新时代;20世纪90年代开始,机器学习学习从知识驱动转变为数据驱动方法比如SVM,RNN等逐步流行起来;21世纪开始,支持向量聚类及无监督学习方法逐步流行起来;2012之后,随着算力和海量样本的支持,深度学习急速发展
3. 机器学习分类
3.1 监督学习
监督学习是从有标签的训练数据中学习模型,然后对某个给定的新数据利用模型预测它的标签。如果分类标签精确度越高,则学习模型准确度越高,预测结果越精确。主要用于回归和分类
常见的监督学习的回归算法有线性回归、回归树、K邻近、Adaboost、神经网络等。
常见的监督学习的分类算法有朴素贝叶斯、决策树、SVM、逻辑回归、K邻近、Adaboost、神经网络等
3.2 半监督学习
半监督学习是利用少量标注数据和大量无标注数据进行学习的模式。半监督学习侧重于在有监督的分类算法中加入无标记样本来实现半监督分类。
常见的半监督学习算法有Pseudo-Label、Π-Model、Temporal Ensembling、Mean Teacher、VAT、UDA、MixMatch、ReMixMatch、FixMatch等。
3.3 无监督学习
无监督学习是从未标注数据中寻找隐含结构的过程。
无监督学习主要用于关联分析、聚类和降维。
常见的无监督学习算法有稀疏自编码、主成分分析PCA、K-Means算法、DBSCAN算法、最大期望算法等。
3.4 强化学习
强化学习类似于监督学习,但未使用样本数据进行训练,是是通过不断试错进行学习的模式。
在强化学习中,有两个可以进行交互的对象:智能体(Agnet)和环境(Environment),还有四个核心要素:策略(Policy)、回报函数(收益信号,Reward Function)、价值函数(Value Function)和环境模型(Environment Model),其中环境模型是可选的。
强化学习常用于机器人避障、棋牌类游戏、广告和推荐等应用场景中。
4. 机器学习项目开发步骤
有5个基本步骤用于执行机器学习任务:
-
收集数据:无论是来自excel,access,文本文件等的原始数据,这一步(收集过去的数据)构成了未来学习的基础。相关数据的种类,密度和数量越多,机器的学习前景就越好。
-
准备数据:任何分析过程都会依赖于使用的数据质量如何。人们需要花时间确定数据质量,然后采取措施解决诸如缺失的数据和异常值的处理等问题。探索性分析可能是一种详细研究数据细微差别的方法,从而使数据的质量迅速提高。
-
练模型:此步骤涉及以模型的形式选择适当的算法和数据表示。清理后的数据分为两部分 - 训练和测试(比例视前提确定); 第一部分(训练数据)用于开发模型。第二部分(测试数据)用作参考依据。
-
评估模型:为了测试准确性,使用数据的第二部分(保持/测试数据)。此步骤根据结果确定算法选择的精度。检查模型准确性的更好测试是查看其在模型构建期间根本未使用的数据的性能。
-
提高性能:此步骤可能涉及选择完全不同的模型或引入更多变量来提高效率。这就是为什么需要花费大量时间进行数据收集和准备的原因。
二、scikit-learn工具介绍
1 scikit-learn安装
参考以下安装教程:https://www.sklearncn.cn/62/
三 数据集
1 .sklearn玩具数据集
数据量小,数据在sklearn库的本地,只要安装了sklearn,直接用来使用,特别是练习
2 .sklearn现实世界数据集
数据量大,数据只能通过网络获取,用fetch_下载
3 .数据集的样子与特征
查看数据集的基本特征
from sklearn.datasets import load_iris
iris = load_iris()
print(iris.feature_names) #特征描述,特征的类别
print(iris.data) #得到特征,花蕊花瓣等等四个特征
print(iris.target) #目标,得到的分类结果
#print(iris.target_names) #目标描述,结果的名称与类别
print(iris.filename) #iris.csv 保存后的文件名

feature_name:特征的名字,特征的描述

四个特征的数据,data,描述的四个数据

数据分类的结果,0,1,2代表不同的类别

目标分类的三种类别,最终要分成这三种,用0,1,2描述
4.把数据做成一张表
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
iris = load_iris()
target=iris.target
feature=iris.data
target.shape=(len(target),1)
data = np.hstack([feature,target])
cols = iris.feature_names
cols.append("target")
DataFrame=pd.DataFrame(data,columns=cols)
加载数据集,把他们赋值给一个变量,改变对与data数据的形式,让他变为二维数组,再制作上标签,上标签记得加入target

四.数据集的划分
1.列表划分数据集
from sklearn.model_selection import train_test_split
data1 = [1, 2, 3, 4, 5]
data2 = ["1a", "2a","3a", "4a", "5a"]
a, b = train_test_split(data1, test_size=0.4, random_state=22)
print(a, b)
a, b = train_test_split(data2, test_size=0.4, random_state=22)
print(a, b)
a, b, c, d = train_test_split(data1, data2, test_size=0.4, random_state=22)
print(a,b,c,d)
参数设置: test_size划分为训练集的比例,random_stata随机数种子,如果数字相同则随机的数字是一样的,如这一次设置的22,则每次数据都是4,1,5

2.ndarray数据集划分
划分前和划分后的数据类型是相同的 data1为list,划分后的a、b也是list data2为ndarray,划分后的c、d也是ndarray
from sklearn.model_selection import train_test_split
import numpy as np
data1 = [1, 2, 3, 4, 5]
data2 = np.array(["1a", "2a","3a", "4a", "5a"])
a, b, c, d = train_test_split(data1, data2, test_size=0.4, random_state=21)
print(a, b, c, d)
print(type(a), type(b), type(c), type(d))

可以看到,列表划分完还是列表,数组划分完还是数组
3. 二维数组数据集划分
train_test_split只划分第一维度,第二维度保持不变(就是划分部分数据,不改变维度)
from sklearn.model_selection import train_test_split
import numpy as np
data1 = np.arange(1, 16, 1)
data1.shape=(5,3)
print(data1)
a, b = train_test_split(data1, test_size=0.4, random_state=22)
print("a=\n", a)
print("b=\n", b)
创建一个数组1-15(取不到16),步长为1,数组的形状是二维数组,五行三列
可以看到数组切分完依然是数组,没有改变维度
4.DataFrame数据集划分
跟上面一样,DataFrame划分完后依然是DataFrame,注意学会DataFrame的制作
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
data1 = np.arange(1, 16, 1)
data1.shape=(5,3)
data1 = pd.DataFrame(data1, index=[1,2,3,4,5], columns=["one","two","three"])
a, b = train_test_split(data1, test_size=0.4, random_state=22)
print("\n", a)
print("\n", b)
这个不是难点,会调用API,会自己做成DataFrame即可,字典数据集划分常用
5.字典数据集划分(相当于Json文件,python里没有这个说法)
用于将字典列表转换为特征向量。这个转换器主要用于处理类别数据和数值数据的混合型数据集
对于类别特征DictVectorizer 会为每个不同的类别创建一个新的二进制特征,如果原始数据中的某个样本具有该类别,则对应的二进制特征值为1,否则为0。对于数值特征保持不变,直接作为特征的一部分,整个数据集就被转换成了一个适合机器学习算法使用的特征向量形式。
from sklearn.feature_extraction import DictVectorizer
data = [{'city':'成都', 'age':30, 'temperature':20},
{'city':'重庆','age':33, 'temperature':60},
{'city':'北京', 'age':42, 'temperature':80},
{'city':'上海', 'age':22, 'temperature':70},
{'city':'成都', 'age':72, 'temperature':40},
]
transfer = DictVectorizer(sparse=True)
data_new = transfer.fit_transform(data)
x = data_new.toarray()
print(type(x))
print(x)

可以看到转化为了numpy.ndarray的形式,成都,上海等通过0,1,代表类别
代码中的难点在于data_new = transfer.fit_transform(data), 这一行将 data 同时传递给 fit 和 transform 方法。fit方法学习如何转换数据,transform 方法应用学习到的知识来转换数据。

6198

被折叠的 条评论
为什么被折叠?



