Sklearn相关介绍及代码示例-1

根据学习的任务模式 (训练数据是否有标签),机器学习可分为四大类:

  1. 有监督学习 (有标签)
  2. 无监督学习 (无标签)
  3. 半监督学习 (有部分标签)
  4. 增强学习 (有评级标签)

无监督模型包括,各种聚类分析(KMeans, DBSCAN)、主成分分析 (PCA)、独立成分分析 (ICA)、隐含狄利克雷分配 (LDA) 等等;

有监督相关模型如下图:
在这里插入图片描述


一、sklearn的自带数据集示意:

  1. 鸢尾花
    数据集包括 150 条鸢尾花的四个特征 (萼片长/宽、花瓣长/宽) 和三个类别(山鸢尾、变色鸢尾、维吉尼亚鸢尾)。
from sklearn.datasets import load_iris

iris = load_iris()

# 数据是以「字典」格式存储的,iris的键有:
print(iris.keys())
# dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])
  1. 手写数字(0-9)
from sklearn.datasets import load_digits

digits = load_digits()
print(digits.keys())
# dict_keys(['data', 'target', 'frame', 'feature_names', 'target_names', 'images', 'DESCR'])

二、监督模型:

  1. 线性回归

    对于函数 2 x + 1 2x+1 2x+1,示意如下:

import numpy as np
from sklearn.linear_model import LinearRegression

model = LinearRegression(normalize=True)

x = np.arange(10)
y = 2 * x + 1

X = x[:, np.newaxis]
model.fit(X, y)

print(model.coef_)
print(model.intercept_)
'''
[2.]
0.9999999999999982
'''
print(model.predict([[10]]))
# [21.]

设置超参数 normalize 为 True,指的在每个特征值上做标准化,这样会加速数值运算。
Sklearn 里模型要求特征 X 是个两维变量 (样本数×特征数),可以用 np.newaxis 加一个维度,把 [1, 2, 3] 转成 [[1], [2], [3]]。再把 X 和 y 丢进 fit() 函数来拟合线性模型的参数。

  1. 分类器-MLPClassifier
    MLPClassifier 类实现了通过 Backpropagation 进行训练的多层感知器(MLP)算法。
    MLPClassifier 通过应用 Softmax 作为输出函数来支持多分类。
from sklearn.neural_network import MLPClassifier

X = [[0, 0], [1, 1], [2, 2], [4, 4]]
y = [0, 0, 1, 1]

# clf = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(5, 2), random_state=1)
clf = MLPClassifier(alpha=1e-5)

clf.fit(X, y)

print(clf.predict([[3, 3]]))
print(clf.predict_proba([[3, 3]]))
# [1]
# [[0.0271484 0.9728516]]

其中,对于分类问题,我们不仅想知道预测的类别是什么,有时还想知道预测该类别的信心如何。
前者用 predict(),后者用 predict_proba()。
sklearn把「每行中最大概率值对应的那一类」作为预测结果,可以发现,predict_proba概率相加为1;

  1. 分类-多标签分类

    在手写数字的例子上,为每个数字设计了多标签:

  • 标签 1 - 奇数、偶数
  • 标签 2 - 小于等于 4,大于 4
import numpy as np
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.multiclass import OneVsRestClassifier

digits = load_digits()
print(digits.keys())
# dict_keys(['data', 'target', 'frame', 'feature_names', 'target_names', 'images', 'DESCR'])


X_train, X_test, y_train, y_test = train_test_split(digits['data'], digits['target'], test_size=0.2)

y_train_multilabel = np.c_[y_train % 2 == 0, y_train <= 4]
print(y_train_multilabel)
'''
[[False  True]
 [False False]
 [ True False]
 ...
 [False  True]
 [False  True]
 [ True  True]]
'''

ova_ml = OneVsRestClassifier(LogisticRegression(solver='lbfgs', max_iter=800))
ova_ml.fit(X_train, y_train_multilabel)
print(len(ova_ml.estimators_))
# 2
print(ova_ml.estimators_)
# [LogisticRegression(max_iter=800), LogisticRegression(max_iter=800)]

print(y_test[:1])
# [5]

print(ova_ml.predict(X_test[:1, :]))
# [[0 0]]

注:numpy— c_ & r_
c_ 和 r_,它们的作用是将两个矩阵拼接到一起。
其中,c_ 是将两个矩阵按列拼接到一起,相当于矩阵左右相加,拼接的矩阵行数要相等。
而,r_ 是将两个矩阵按行拼接,相当于矩阵上下相加,要求矩阵的列数相等。

参考:

  1. https://mp.weixin.qq.com/s?__biz=MzU0MDQ1NjAzNg==&mid=2247559334&idx=1&sn=ea98c833bdb665df9a89d57be3873493&chksm=fb3b4dadcc4cc4bbbd26d6fbeb706a747059203f8431927a8c1ab43fe94650ccd4e51d1669c3&scene=27
  2. https://blog.csdn.net/weixin_47867005/article/details/125966146
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值