机器学习(Meachine Learning):首先我们给定机器一堆已有的样本数据,让机器去挖掘其中的规律,然后用这个规律来预测未知的数据。
SKlearn库是机器学习中非常强大的一个库,它包含现有的主流机器学习算法。
[SKlearn官网]:https://scikit-learn.org/stable/index.html
机器学习分类
监督学习(Supervised Learning):给定的数据既包含了其特征,也包含了其类别。例如:一组数据[花瓣长度,花瓣宽度,花萼长度,花萼宽度,海棠花],其中长度、宽度等值我们称其为特征值(Features),海棠花就是类别值,也叫标签值(Labels)。
我们让机器去学习给定的特征值与标签值之间的关系,然后去让其对无标签数据进行一个结果预测。
分类问题(classification): 预测未知的数据属于哪一个种类。比如给定一组花瓣的长度宽度值,预测它属于哪一种花。
回归问题(regression):预测结果是一个准确的值。比如浦东新区房价预测,小孩身高预测等。
无监督学习(Unsupervised Learning):给定一组无标签的样本,让机器根据其特征之间的相似性,对其进行分类,这种问题我们常称之为聚类(clustering)。还包括数据降维分析,将一个高维度的数据降低到二维或三维数据,便于我们理解。
训练集(training set)与测试集(testing set)
通常情况下,我们拿到一个数据集,首先对其做一个切分,将其分为训练集与测试集。接着我们指定一种算法,对训练集进行训练。最后一步,我们使用经过训练的算法来对测试集进行预测。
机器学习的基本流程
加载数据集
我们使用sklearn库中所自带的鸢尾花数据集。
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier#导入K近邻分类器
from sklearn.model_selection import train_test_split #导入切分数据集模块
#导入iris数据集
iris = datasets.load_iris()
#我们将特征值存为变量X,将标签值存为变量y
X = iris.data
y = iris.target
#对数据进行切分
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.3)
建立机器学习算法模型
#引入我们的算法,以KNN为例
knn = KNeighborsClassifier()
#使用KNN算法训练我们的数据集
knn.fit(X_train,y_train)
结果预测
#使用经过训练的算法来预测我们的测试集
y_pred = knn.predict(X_test)
print(y_pred) #打印算法的预测结果
print(y_test) #打印真实的数据结果
#评估我们预测结果的准确性
score = knn.score(X_test,y_test)
print(score)
结果打印
[0 0 0 0 0 1 1 1 0 0 1 0 0 0 2 1 0 1 0 0 2 0 1 1 2 1 0 1 2 2 0 1 2 0 1 0 2
2 0 1 1 1 2 2 2] #knn算法的预测值
[0 0 0 0 0 1 1 1 0 0 1 0 0 0 2 1 0 1 0 0 2 0 1 1 2 1 0 1 2 2 0 1 2 0 1 0 2
1 0 1 1 1 2 2 2] #数据的真实值
0.9777777777777777 #knn算法预测结果的准确性
模型参数调整
一般情况下我们使用默认的参数就行,sklearn默认参数的效果也挺不错的。下面是Knn算法中参数项,我们可对其中每一个参数进行调整,以提高模型的预测结果。
KNeighborsClassifier(n_neighbors=5, weights=’uniform’, algorithm=’auto’,
leaf_size=30, p=2, metric=’minkowski’, metric_params=None, n_jobs=None,**kwargs)
模型的保存
当我们训练好一个模型以后,我们可以将其保存到本地,后面若是还有使用的需求,我们可直接调用该模型。模型的保存有两种方法:
方法一:使用Python自带的pickle库
import pickle
#保存模型
model = pickle.dumps(knn)
#调用模型
model1 = pickle.loads(model)
#使用模型进行结果预测
model1.predict(X_test[:10,:])
#结果如下所示
[0, 0, 0, 0, 0, 1, 1, 1, 0, 0]
方法二:使用sklearn的附加库externals
from sklearn.externals import joblib
joblib.dump(knn,'knn_model')#knn_model给算法起个名字
model2 = joblib.load('knn_model')
model2.predict(X_test[:10,:])
#预测结果如下
[0, 0, 0, 0, 0, 1, 1, 1, 0, 0]
我也是个机器学习方面的新手,第一章我们就来简单的聊聊机器学习的基本流程,后续我将会详细的介绍一些当前的主流机器学习算法。如果你也对机器学习感兴趣,大家一起加油努力。