python的scikit-learn算法库实现

1.sklearn工具包

在机器学习的世界,总有着源码与调包之争。
调包的人不需要对算法理解得太过深刻,对背后的数学原理长久不用可能也会忘记,只需要调用他人写好的代来达成自己的目的,因此被写源码的人嘲笑嫌弃,业界甚至流传着"调包侠”的恶名,指那些只会调用其他人写好的代码,自己不写代码的人。然而,这其实只是一种假象一真正自己写的,只有超巨大厂BAT,头条,小米等等这些公司,他们拥有巨大的技术团队,超强硬件支撑,并且拥有过于细致的需求,以至于市面上以"大而全”为目标的算法库无法满足他们的需要。而这些公司中真正有价值的机器学习工程师,每天都在忙于改变世界,根本不会混到初学者的圈子里来。世界上几乎90%的算法公司都使用别人写好的包,因为自己创造算法不是那么简单的事儿。且不说如果自己写算法能否写得比市面上已经存在得包还快还稳定,-个算法不仅仅是要实现对结果的预测,它最终要最终部署到整个系统中,实现在产品上,是有非常长的一段路需要走的,其中包括了从后端数据库到前端产品的一系列过程,如果你的算法是自己写的,你的兼容性很难保证,除非公司的所有技术接口都是自己写的一套程序!而这对于世界上的大部分公司来说根本不可能,没那么闲,没那么多资源和时间。

sklearn官方文档
在这里插入图片描述
自2007年发布以来,scikit-learn已经成为Python中重要的机器学习库了。scikit-learn, 简称sklearn, 支持了包括分类、回归、降维和聚类四大机器学习算法,以及特征提取、数据预处理和模型评估三大模块
在工程应用中,用Python手写代码来从头实现一个算法的可能性非常低,这样不仅耗时耗力,还不一定能够写出构架清晰,稳定性强的模型。更多情况下,是分析采集到的数据,根据数据特征选择适合的算法,在工具包中调用算法,调整算法的参数,获取需要的信息,从而实现算法效率和效果之间的平衡。而sklearn,正是这样一个可以帮助我们高效实现算法应用的工具包。
sklearn基本建模流程
在这里插入图片描述

  • 主要设计原则
    一致性: 所有对象共享一个简单一致的界面(接口)。
    ● 估算器: fit()方法。 基于数据估算参数的任意对象,使用的参数是一 个数据集(对应X,有监督算法还需要一 个y),引导估算过程的任意其他参数称为超参数,必须被设置为实例变量。
    ● 转换器: transform0方法。 使用估算器转换数据集,转换过程依赖于学习参数。可以使用便捷方式:fit transform0,相当于先fit()再transform0. (fit transform有时被优化过,速度更快)
    ● 预测器: predictQ方法。 使用估算器预测新数据,返回包含预测结果的数据,还有score(方法:用于度量给定测试集的预测效果的好坏。(连续y使用R方,分类y使用准确率accuracy)

监控:
检查所有参数,所有估算器的超参数可以通过公共实例变量访问,所有估算器的学习参数都可以通过有下划线后缀的公共实例变量访问。

防止类扩散:
对象类型固定,数据集被表示为Numpy数组或Scipy稀疏矩阵,超参是普通的Python字符或数字。

合成:
现有的构件尽可能重用,可以轻松创建一个流水线Pipeline。

合理默认值:
大多数参数提供合理默认值,可以轻松搭建一个基 本的工作系统。
CLF、KNN、DT、RF、SVM都支持估算器功能

clf.fit()

在这里插入图片描述

2. sklearn 实现KNN

KNN实现分类问题,是不需要先使用数据,可以先训练一组数据,然后进行分类,这里分成三类,P为测试点,三类中心点为[0,0],[1,1],[-1,1]

# sklearn 实现
X , y = make_blobs(n_samples = 50,
                   cluster_std = [0.3, 0.3, 0.3],
                   centers = [[0,0],[1,1],[-1,1]]
                   ,random_state = r
                  )
p = [[0.5, 1.5]]
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors = 4)   #实例化
clf.fit(X, y)    #训练数据
clf.predict(p)   #预测数据

3.breast_cancer 数据集

导入breast_cancer 数据集

# breast_cancer 数据集

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


# 探索数据集
data = load_breast_cancer()
x = data['data']
y = data['target']

训练数据集

name = ['平均半径','平均纹理','平均周长','平均面积',
        '平均光滑度','平均紧凑度','平均凹度',
        '平均凹点','平均对称','平均分形维数',
        '半径误差','纹理误差','周长误差','面积误差',
        '平滑度误差','紧凑度误差','凹度误差',
        '凹点误差','对称误差',
        '分形维数误差','最差半径','最差纹理',
        '最差的边界','最差的区域','最差的平滑度',
        '最差的紧凑性','最差的凹陷','最差的凹点',
        '最差的对称性','最差的分形维数']

pd.DataFrame(x, columns = name)
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors = 10)   #实例化
clf.fit(x, y)

预测数据准确率

clf.score(x, y) # 准确率的计算

或者这个也一样

#准确率的计算
total_data = pd.DataFrame(x, columns = name)
total_data['Y'] = y
total_data['Y_pred'] = clf.predict(x)
(total_data['Y'] == total_data['Y_pred']).sum() / x.shape[0]

结果

0.9420035149384886

划分训练集和测试集正确率

# 划分训练集和测试集
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
                                                    #,random_state = 420
                                                   )

clf = KNeighborsClassifier(n_neighbors = 2)   #实例化
clf.fit(x_train, y_train)
clf.score(x_train, y_train), clf.score(x_test, y_test)

正确率百分比

(0.9698492462311558, 0.9181286549707602)

大于5%属于过拟合结果。
**过拟合:**模型在训练集下面学的实在太好了,将训练集的嵘音误当成X与Y的真实的规律学习进去了,从而在测试集上的表现非常差

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值