本系列文章md笔记(已分享)次要探讨机器学习算法相干常识。机器学习算法文章笔记以算法、案例为驱动的学习,随同浅显易懂的数学知识,让大家把握机器学习常见算法原理,利用Scikit-learn实现机器学习算法的利用,联合场景解决理论问题。包含K-近邻算法,线性回归,逻辑回归,决策树算法,集成学习,聚类算法。K-近邻算法的间隔公式,利用LinearRegression或SGDRegressor实现回归预测,利用LogisticRegression实现逻辑回归预测,利用DecisionTreeClassifier实现决策树分类,利用RandomForestClassifie实现随机森林算法,利用Kmeans实现聚类工作。
全套笔记和代码自取移步gitee仓库: gitee仓库获取残缺文档和代码
感兴趣的小伙伴能够自取哦,欢送大家点赞转发~
共 7 章,44 子模块
K-近邻算法
学习指标
- 把握K-近邻算法实现过程
- 晓得K-近邻算法的间隔公式
- 晓得K-近邻算法的超参数K值以及取值问题
- 晓得kd树实现搜寻的过程
- 利用KNeighborsClassifier实现分类
- 晓得K-近邻算法的优缺点
- 晓得穿插验证实现过程
- 晓得超参数搜寻过程
- 利用GridSearchCV实现算法参数的调优
1.6 案例:鸢尾花品种预测--数据集介绍
本试验介绍了应用Python进行机器学习的一些基本概念。 在本案例中,将应用K-Nearest Neighbor(KNN)算法对鸢尾花的品种进行分类,并测量花的特色。
本案例目标:
- 遵循并了解残缺的机器学习过程
- 对机器学习原理和相干术语有根本的理解。
- 理解评估机器学习模型的根本过程。
1 案例:鸢尾花品种预测
Iris数据集是罕用的分类试验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量剖析的数据集。对于数据集的具体介绍:
2 scikit-learn中数据集介绍
2.1 scikit-learn数据集API介绍
sklearn.datasets
- 加载获取风行数据集
datasets.load_*()
- 获取小规模数据集,数据蕴含在datasets里
datasets.fetch_*(data_home=None)
- 获取大规模数据集,须要从网络上下载,函数的第一个参数是data_home,示意数据集下载的目录,默认是 ~/scikit_learn_data/
2.1.1 sklearn小数据集
- sklearn.datasets.load_iris()
加载并返回鸢尾花数据集
2.1.2 sklearn大数据集
sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
- subset:'train'或者'test','all',可选,抉择要加载的数据集。
- 训练集的“训练”,测试集的“测试”,两者的“全副”
2.2 sklearn数据集返回值介绍
load和fetch返回的数据类型datasets.base.Bunch(字典格局)
- data:特色数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组
- target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
- DESCR:数据形容
- feature_names:特色名,新闻数据,手写数字、回归数据集没有
- target_names:标签名
from sklearn.datasets import load_iris # 获取鸢尾花数据集 iris = load_iris()print("鸢尾花数据集的返回值:\n", iris) # 返回值是一个继承自字典的Bench print("鸢尾花的特征值:\n", iris["data"])print("鸢尾花的目标值:\n", iris.target)print("鸢尾花特色的名字:\n", iris.feature_names)print("鸢尾花目标值的名字:\n", iris.target_names)print("鸢尾花的形容:\n", iris.DESCR)
2.3 查看数据分布
通过创立一些图,以查看不同类别是如何通过特色来辨别的。 在现实状况下,标签类将由一个或多个特色对完满分隔。 在事实世界中,这种现实状况很少会产生。
seaborn介绍
- Seaborn 是基于 Matplotlib 外围库进行了更高级的 API 封装,能够让你轻松地画出更丑陋的图形。而 Seaborn 的丑陋次要体现在配色更加难受、以及图形元素的款式更加细腻。
- 装置 pip3 install seaborn
seaborn.lmplot() 是一个十分有用的办法,它会在绘制二维散点图时,主动实现回归拟合
- sns.lmplot() 里的 x, y 别离代表横纵坐标的列名,
- data= 是关联到数据集,
- hue=*代表依照 species即花的类别分类显示,
- fit_reg=是否进行线性拟合。
- 参考链接: api链接
%matplotlib inline # 内嵌绘图 import seaborn as snsimport matplotlib.pyplot as pltimport pandas as pd # 把数据转换成dataframe的格局 iris_d = pd.DataFrame(iris['data'], columns = ['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])iris_d['Species'] = iris.targetdef plot_iris(iris, col1, col2): sns.lmplot(x = col1, y = col2, data = iris, hue = "Species", fit_reg = False) plt.xlabel(col1) plt.ylabel(col2) plt.title('鸢尾花品种分布图') plt.show()plot_iris(iris_d, 'Petal_Width', 'Sepal_Length')
2.4 数据集的划分
机器学习个别的数据集会划分为两个局部:
- 训练数据:用于训练,构建模型
- 测试数据:在模型测验时应用,用于评估模型是否无效
划分比例:
- 训练集:70% 80% 75%
- 测试集:30% 20% 25%
数据集划分api
sklearn.model_selection.train_test_split(arrays, *options)
- x 数据集的特征值
- y 数据集的标签值
- test_size 测试集的大小,个别为float
- random_state 随机数种子,不同的种子会造成不同的随机采样后果。雷同的种子采样后果雷同。
- return 测试集特色训练集特征值值,训练标签,测试标签(默认随机取)
from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_split # 1、获取鸢尾花数据集 iris = load_iris() # 对鸢尾花数据集进行宰割 # 训练集的特征值x_train 测试集的特征值x_test 训练集的目标值y_train 测试集的目标值y_test x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)print("x_train:\n", x_train.shape) # 随机数种子 x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=6)x_train2, x_test2, y_train2, y_test2 = train_test_split(iris.data, iris.target, random_state=6)print("如果随机数种子不统一:\n", x_train == x_train1)print("如果随机数种子统一:\n", x_train1 == x_train2)
1.7 特色工程-特色预处理
1 什么是特色预处理
1.1 特色预处理定义
scikit-learn的解释
provides several common utility functions and transformer classes to change raw feature vectors into a representation that is more suitable for the downstream estimators.
翻译过去:通过一些转换函数将特色数据转换成更加适宜算法模型的特色数据过程
为什么咱们要进行归一化/标准化?
- 特色的单位或者大小相差较大,或者某特色的方差相比其余的特色要大出几个数量级,容易影响(摆布)指标后果,使得一些算法无奈学习到其它的特色
举例:约会对象数据
咱们须要用到一些办法进行无穷纲化,使不同规格的数据转换到同一规格
1.2 蕴含内容(数值型数据的无穷纲化)
- 归一化
- 标准化
1.3 特色预处理API
sklearn.preprocessing
2 归一化
2.1 定义
通过对原始数据进行变换把数据映射到(默认为[0,1])之间
2.2 公式
作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’为最终后果,mx,mi别离为指定区间值默认mx为1,mi为0
那么怎么了解这个过程呢?咱们通过一个例子
2.3 API
sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
MinMaxScalar.fit_transform(X)
- X:numpy array格局的数据[n_samples,n_features]
- 返回值:转换后的形态雷同的array
2.4 数据计算
咱们对以下数据进行运算,在dating.txt中。保留的就是之前的约会对象数据
milage,Liters,Consumtime,target40920,8.326976,0.953952,314488,7.153469,1.673904,226052,1.441871,0.805124,175136,13.147394,0.428964,138344,1.669788,0.134296,1
- 剖析
1、实例化MinMaxScalar
2、通过fit_transform转换
import pandas as pdfrom sklearn.preprocessing import MinMaxScalerdef minmax_demo(): """ 归一化演示 :return: None """ data = pd.read_csv("dating.txt") print(data) # 1、实例化一个转换器类 transfer = MinMaxScaler(feature_range=(2, 3)) # 2、调用fit_transform data = transfer.fit_transform(data[['milage','Liters','Consumtime']]) print("最小值最大值归一化解决的后果:\n", data) return None
返回后果:
milage Liters Consumtime target0 40920 8.326976 0.953952 31 14488 7.153469 1.673904 22 26052 1.441871 0.805124 13 75136 13.147394 0.428964 1.. ... ... ... ...998 48111 9.134528 0.728045 3999 43757 7.882601 1.332446 3[1000 rows x 4 columns]最小值最大值归一化解决的后果: [[ 2.44832535 2.39805139 2.56233353] [ 2.15873259 2.34195467 2.98724416] [ 2.28542943 2.06892523 2.47449629] ..., [ 2.29115949 2.50910294 2.51079493] [ 2.52711097 2.43665451 2.4290048 ] [ 2.47940793 2.3768091 2.78571804]]
问题:如果数据中异样点较多,会有什么影响?
2.5 归一化总结
留神最大值最小值是变动的,另外,最大值与最小值非常容易受异样点影响,所以这种办法鲁棒性较差,只适宜传统准确小数据场景。
怎么办?
3 标准化
3.1 定义
通过对原始数据进行变换把数据变换到均值为0,标准差为1范畴内
3.2 公式
作用于每一列,mean为平均值,为标准差
所以回到方才异样点的中央,咱们再来看看标准化
- 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么后果显然会产生扭转
- 对于标准化来说:如果出现异常点,因为具备肯定数据量,大量的异样点对于平均值的影响并不大,从而方差扭转较小。
3.3 API
sklearn.preprocessing.StandardScaler( )
- 解决之后每列来说所有数据都汇集在均值0左近标准差差为1
StandardScaler.fit_transform(X)
- X:numpy array格局的数据[n_samples,n_features]
- 返回值:转换后的形态雷同的array
3.4 数据计算
同样对下面的数据进行解决
- 剖析
1、实例化StandardScaler
2、通过fit_transform转换
import pandas as pdfrom sklearn.preprocessing import StandardScalerdef stand_demo(): """ 标准化演示 :return: None """ data = pd.read_csv("dating.txt") print(data) # 1、实例化一个转换器类 transfer = StandardScaler() # 2、调用fit_transform data = transfer.fit_transform(data[['milage','Liters','Consumtime']]) print("标准化的后果:\n", data) print("每一列特色的平均值:\n", transfer.mean_) print("每一列特色的方差:\n", transfer.var_) return None
返回后果:
milage Liters Consumtime target0 40920 8.326976 0.953952 31 14488 7.153469 1.673904 22 26052 1.441871 0.805124 1.. ... ... ... ...997 26575 10.650102 0.866627 3998 48111 9.134528 0.728045 3999 43757 7.882601 1.332446 3[1000 rows x 4 columns]标准化的后果: [[ 0.33193158 0.41660188 0.24523407] [-0.87247784 0.13992897 1.69385734] [-0.34554872 -1.20667094 -0.05422437] ..., [-0.32171752 0.96431572 0.06952649] [ 0.65959911 0.60699509 -0.20931587] [ 0.46120328 0.31183342 1.00680598]]每一列特色的平均值: [ 3.36354210e+04 6.55996083e+00 8.32072997e-01]每一列特色的方差: [ 4.81628039e+08 1.79902874e+01 2.46999554e-01]
3.5 标准化总结
在已有样本足够多的状况下比较稳定,适宜古代嘈杂大数据场景。