SciKit-Learn 入门学习笔记(1)

本文为 SciKit-Learn 入门基础篇,主要介绍了一般用法,一些高级用法见:SciKit-Learn 入门学习笔记(2)

1 SciKit-Learn介绍

Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模块之一.

Sklearn 包含了很多种机器学习的方式:

  • Classification 分类
  • Regression 回归
  • Clustering 非监督分类
  • Dimensionality reduction 数据降维
  • Model Selection 模型选择
  • Preprocessing 数据预处理

2 Sklearn 安装

官方安装教程:https://scikit-learn.org/stable/install.html

3 选择学习方法

在这里插入图片描述
从 START 开始,首先看数据的样本是否 >50,小于则需要收集更多的数据。
然后看问题属于哪一类,就选择相应的算法。 当然还要考虑数据的大小,例如 100K 是一个阈值。

分类回归是监督式学习,即每个数据对应一个 label。 聚类是非监督式学习,即没有 label。
降维:当数据集有很多很多属性的时候,可以通过降维算法把属性归纳起来。例如 20 个属性只变成 2 个,注意,这不是挑出 2 个,而是压缩成为 2 个,它们集合了 20 个属性的所有特征,相当于把重要的信息提取的更好,不重要的信息就不要了。

可以发现有些方法是既可以作为分类,也可以作为回归,例如 SGD。

4 通用学习模式

Sklearn 把所有机器学习的模式整合统一起来了,学会了一个模式就可以通吃其他不同类型的学习模式。

例如:分类器。Sklearn 本身就有很多数据库,可以用来练习。 以 Iris 的数据为例,这种花有四个属性,花瓣的长宽,茎的长宽,根据这些属性把花分为三类。用分类器把四种类型的花分开。
KNN classifier,就是选择几个临近点,综合它们做个平均来作为预测值。

4.1 导入模块

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

4.2 创建数据

# 加载 iris 的数据,把属性存在 X,类别标签存在 y:
iris = datasets.load_iris()
iris_X = iris.data
iris_y = iris.target

# 观察一下数据集,X 有四个属性,y 有 0,1,2 三类:
print(iris_X[:2, :])
print(iris_y)
"""
[[ 5.1  3.5  1.4  0.2]
 [ 4.9  3.   1.4  0.2]]
[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 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
 """
 
# 把数据集分为训练集和测试集,其中 test_size=0.3,即测试集占总数据的 30%:
X_train, X_test, y_train, y_test = train_test_split(
    iris_X, iris_y, test_size=0.3)

# 可以看到分开后的数据集,顺序也被打乱,这样更有利于学习模型:
print(y_train)
"""
[2 1 0 1 0 0 1 1 1 1 0 0 1 2 1 1 1 0 2 2 1 1 1 1 0 2 2 0 2 2 2 2 2 0 1 2 2
 2 2 2 2 0 1 2 2 1 1 1 0 0 1 2 0 1 0 1 0 1 2 2 0 1 2 2 2 1 1 1 1 2 2 2 1 0
 1 1 0 0 0 2 0 1 0 0 1 2 0 2 2 0 0 2 2 2 1 2 0 0 2 1 2 0 0 1 2]
 """

4.3 建立模型-训练-预测

knn = KNeighborsClassifier() # 定义模块方式 KNeighborsClassifier()
knn.fit(X_train, y_train) # 用 fit 来训练 training data,这一步就完成了训练的所有步骤, 后面的 knn 就已经是训练好的模型
# 直接用 knn 来 predict 测试集的数据, 对比用模型预测的值与真实的值,可以看到大概模拟出了数据,但是有误差,是不会完完全全预测正确的。
print(knn.predict(X_test))
print(y_test)

"""
[2 0 0 1 2 2 0 0 0 1 2 2 1 1 2 1 2 1 0 0 0 2 1 2 0 0 0 0 1 0 2 0 0 2 1 0 1
 0 0 1 0 1 2 0 1]
[2 0 0 1 2 1 0 0 0 1 2 2 1 1 2 1 2 1 0 0 0 2 1 2 0 0 0 0 1 0 2 0 0 2 1 0 1
 0 0 1 0 1 2 0 1]
 """

5 sklearn 强大数据库

在这里插入图片描述
如果是自己生成数据,可以按照函数的形式,输入 sample,feature,target 的个数等等。

sklearn.datasets.make_regression(n_samples=100, n_features=100, n_informative=10, n_targets=1, bias=0.0, effective_rank=None, tail_strength=0.5, noise=0.0, shuffle=True, coef=False, random_state=None)[source]

5.1 导入模块

from __future__ import print_function
from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

5.2 导入数据-训练模型

# 加载数据,并给 X 和 y 赋值,这种形式在 Sklearn 中都是高度统一的。
loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target

# 定义模型
model = LinearRegression() # 用默认值去建立 model,默认值也不错,也可以自己改变参数使模型更好
model.fit(data_X, data_y) # 训练模型

# 打印出预测值,这里用 X 的前 4 个来预测,同时打印真实值,作为对比,可以看到是有些误差的。
print(model.predict(data_X[:4, :]))
print(data_y[:4])
“”“
[ 30.00821269  25.0298606   30.5702317   28.60814055]
[ 24.   21.6  34.7  33.4]
”“”

5.3 创建虚拟数据-可视化

# 用函数来建立 100 个 sample,有一个 feature,和一个 target,这样比较方便可视化。
X, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=10)

# 用 scatter 的形式来输出结果,即用函数生成的 Linear Regression 用的数据。
plt.scatter(X, y)
plt.show()

在这里插入图片描述
noise 越大的话,点就会越来越离散,例如 noise 由 10 变为 50。

X, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=50)
plt.scatter(X, y)
plt.show()

在这里插入图片描述

6 sklearn 常用属性与功能

6.1 导入包和模型

rom 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()

6.2 训练和预测

model.fit(data_X, data_y) # 训练模型

print(model.predict(data_X[:4, :]))  # 用训练好的模型预测
"""
[ 30.00821269  25.0298606   30.5702317   28.60814055]
"""

6.3 参数和分数

print(model.coef_) # Model 的属性 输出模型的斜率
print(model.intercept_) # Model 的属性 输出模型的截距(与y轴的交点)

"""
[ -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.4911032804
"""

# model.get_params() 也是功能,它可以取出之前定义的参数
print(model.get_params())

"""
{'copy_X': True, 'normalize': False, 'n_jobs': 1, 'fit_intercept': True}
"""

# model.score(data_X, data_y) 可以对 Model 用 R^2 的方式进行打分,输出精确度
print(model.score(data_X, data_y)) # R^2 coefficient of determination

"""
0.740607742865
"""

参考资料:
https://mofanpy.com/tutorials/machine-learning/sklearn/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值