前言
于sklearn的使用来说,目前只是想成为一名调包侠,但是调包侠起码也得知道有哪些包可以调,为此找了一些教程想快速入门,通过一番查找,终于找到了一名大佬叫做莫烦写的教程,教程短小实用,对我想快速了解sklearn来说是再适合不过了。
在教程里完成sklearn的一般使用的教程之后,为了巩固,为此写此笔记,加深理解和日后的复习。
通用模板
实例化
对于sklearn这个库来说,是用面向对象的思想来使用的。
就是每种算法都是一个对象,要使用某种算法解决问题,可以将其import进来,此时它只是个对象,只有在实例化之后才可以对数据学习和预测
from sklearn.neighbors import KNeighborsClassifier
obj = KNeighborsClassifier()
此时实例obj可以对数据训练学习之后再对数据进行预测了,但是此时并没有数据
不过sklearn中有数据供我们使用
获取数据
from sklearn import datasets
iris = datasets.load_iris()
x = iris.data
y = iris.target
导入的数据是个训练集,并不能直接传递给实例对其学习,因为实例需要特征和标签才能开始学习(这个实例是这个情况的,无监督学习现在还不那么清楚是个什么样的情况)
不过特征和标签都存储在data和target标签中,可以轻松的获得
开始训练和预测
这个时候,实例有了,数据也有了,可以开始对数据训练和学习了
obj.fit(x, y)
y_pred = obj.predict(x[:4, :]
print(y - y_pred)
输出结果:
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0
-1 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0]
准确度还是蛮高的,到此已经完成了一个机器学习的基本过程
划分训练集
一般把训练集划分为训练集和测试集,这样来验证算法的准确性比较好
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)
其中参数test_size=0.3代表将把训练集的30%数据当做测试集使用
现在有了训练集和测试集,重复之前的步骤,对训练集训练:
knn = KNeighborsClassifier()
knn.fit(x_train, y_train)
y_pred = knn.predict(x_test)
print(y_pred - y_test)
输出结果:
[ 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
注意,每次运行的输出结果可能不一样
参数获取
对于每个学习到的模型,也就是一个假设函数,都有一些参数
还有预测的时候也是有参数设置的
对于这两个参数的获取,可以通过实例化后的实例的coef_,intercept_属性和get_params()获得
由于分类好像没有实例的那几个属性,换个线性回归的的模型:
from sklearn import datasets
from sklearn.linear_model import LinearRegression
loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target
model = LinearRegression()
model.fit(data_X, data_y)
y_pred = model.predict(data_X[:4, :])
print(model.coef_)
print(model.intercept_)
输出:
[-1.07170557e-01 4.63952195e-02 2.08602395e-02 2.68856140e+00
-1.77957587e+01 3.80475246e+00 7.51061703e-04 -1.47575880e+00
3.05655038e-01 -1.23293463e-02 -9.53463555e-01 9.39251272e-03
-5.25466633e-01]
36.49110328036133
获得训练学习时设置的参数:
print(model.get_params())
# {'n_jobs': 1, 'copy_X': True, 'normalize': False, 'fit_intercept': True}
评估模型
最经常用的评估方法,越接近于1的效果越好:
print(model.score(data_X, data_y))
# 0.7406077428649427