机器学习笔记之scikit-learn入门

1.Skikit-learn是什么

Scikit-learn是专门面向机器学习的Python开源框架,是机器学习中常用的库,它实现了各种成熟的算法,并且易于安装与使用。

scikit-learn中包含了大部分机器学习的方法,如分类,回归,无监督,数据降维,数据预处理等等。

可通过pip命令安装

pip install -U scikit-learn

安装成功验证

from sklearn import svm

 

2.常见数据集

在机器学习过程中,经常需要使用各种各样的数据集,因此Scikit-learn框架也提供一些常用的数据集。

序号数据集名称调用方式数据描述
1鸢尾花数据集Load_iris()用于多分类任务的数据集
2波士顿房价数据集Load_boston()用于回归任务的经典数据集
3糖尿病数据集Load_diabetes()用于回归任务的经典数据集
4手写数字数据集Load_digits()用于多分类任务的数据集
5乳腺癌数据集Load_breast_cancer()经典的用于二分类任务的数据集
6体能训练数据集Load_linnerud()经典的用于多变量回归任务的数据集

大数据集

2.1 加载波士顿房价数据集

# 加载boston房价信息示例
from sklearn.datasets import load_boston
data,target = load_boston(return_X_y=True)  # return_X_y:表示是否返回target(即类别,这里是房价),默认为False,只返回data(即属性)
print(data.shape)  # (506, 13)  506行,13列
print(target.shape) # (506,)   506行,1列,这一列即为价格
print(target.size)  # 506   表示整个数据集大小,即有506条数据

波士顿房价数据集-属性描述

CRIM:城镇人均犯罪率。

ZN:住宅用地超过 25000 sq.ft. 的比例。

INDUS:城镇非零售商用土地的比例。

CHAS:查理斯河空变量(如果边界是河流,则为1;否则为0)

NOX:一氧化氮浓度。

RM:住宅平均房间数。

AGE:1940 年之前建成的自用房屋比例。

DIS:到波士顿五个中心区域的加权距离。

RAD:辐射性公路的接近指数。

TAX:每 10000 美元的全值财产税率。

PTRATIO:城镇师生比例。

B:1000(Bk-0.63)^ 2,其中 Bk 指代城镇中黑人的比例。

LSTAT:人口中地位低下者的比例。

MEDV:自住房的平均房价,以千美元计。

2.2 加载手写数字数据集

from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
digits = load_digits()
print(digits.images[0])
'''
[[  0.   0.   5.  13.   9.   1.   0.   0.]
 [  0.   0.  13.  15.  10.  15.   5.   0.]
 [  0.   3.  15.   2.   0.  11.   8.   0.]
 [  0.   4.  12.   0.   0.   8.   8.   0.]
 [  0.   5.   8.   0.   0.   9.   8.   0.]
 [  0.   4.  11.   0.   1.  12.   7.   0.]
 [  0.   2.  14.   5.  10.  12.   0.   0.]
 [  0.   0.   6.  13.  10.   0.   0.   0.]]
'''
# 图像显示
plt.matshow(digits.images[6])
plt.show()

'''
matshow是一个绘制矩阵的函数
数据存储在digits.images数组中
数组每个元素表示一张图像(如上images[0]),每个数值代表一种灰度等级,0为白色,15为黑色
'''

图形如下:可以看出该images[6]数组表示的数字是6

3.算法模型调用

3.1 回归之基于波士顿数据集

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)

print(data_X[:4])
'''
这里选了训练集中前三行的数据,这里将全部数据用于训练,并没有对数据进行划分
[[  6.32000000e-03   1.80000000e+01   2.31000000e+00   0.00000000e+00
    5.38000000e-01   6.57500000e+00   6.52000000e+01   4.09000000e+00
    1.00000000e+00   2.96000000e+02   1.53000000e+01   3.96900000e+02
    4.98000000e+00]
 [  2.73100000e-02   0.00000000e+00   7.07000000e+00   0.00000000e+00
    4.69000000e-01   6.42100000e+00   7.89000000e+01   4.96710000e+00
    2.00000000e+00   2.42000000e+02   1.78000000e+01   3.96900000e+02
    9.14000000e+00]
 [  2.72900000e-02   0.00000000e+00   7.07000000e+00   0.00000000e+00
    4.69000000e-01   7.18500000e+00   6.11000000e+01   4.96710000e+00
    2.00000000e+00   2.42000000e+02   1.78000000e+01   3.92830000e+02
    4.03000000e+00]
 [  3.23700000e-02   0.00000000e+00   2.18000000e+00   0.00000000e+00
    4.58000000e-01   6.99800000e+00   4.58000000e+01   6.06220000e+00
    3.00000000e+00   2.22000000e+02   1.87000000e+01   3.94630000e+02
    2.94000000e+00]]
'''
# 预测
print(model.predict(data_X[:4]))
'''
预测的房价结果为
[ 30.00821269  25.0298606   30.5702317   28.60814055]
'''
# 对比真实结果
print(data_y[:4])
'''
真实结果为
[ 24.   21.6  34.7  33.4]
'''

3.2 KNN算法之基于IRIS鸢尾花数据集

该数据集有四个属性:花萼长度,花萼宽度,花瓣长度,花瓣宽度

花卉有三种类别:Setosa,Versicolour,Virginica(0,1,2表示)

该数据集是一个小数据集,总共有150个数据集,每个类别50个数据

实现如下:

from sklearn.model_selection import train_test_split  # 将矩阵随机划分为训练子集和测试子集
from sklearn import datasets   # 数据集
from sklearn.neighbors import KNeighborsClassifier  # K近邻分类器

# 导入鸢尾花数据集
iris = datasets.load_iris()

# 得到数据和标签
iris_X = iris.data
iris_y = iris.target

# 划分为数据集和测试集数据
X_train,X_test,y_train,y_test = train_test_split(iris_X,iris_y, test_size=0.3)  # test_size表示测试集占比

# 设置分类器
knn = KNeighborsClassifier()

# 训练
knn.fit(X_train, y_train)

# 用测试集预测,即交叉验证
print(knn.predict(X_test))
print(y_test)
'''
预测结果:
[1 0 0 2 0 2 2 2 2 2 1 1 1 2 0 0 2 1 0 0 0 1 2 1 1 0 2 0 0 0 0 0 0 2 2 1 1 1 1 2 2 0 1 1 2]
实际结果
[1 0 0 2 0 2 2 2 2 2 1 1 1 2 0 0 2 1 0 0 0 1 2 1 2 0 2 0 0 0 0 0 0 2 2 1 1 2 1 2 2 0 1 1 2]
'''
# 正确率
print(knn.score(X_test, y_test))  # 0.955555555556

参考资料

https://www.jianshu.com/p/e0844e7cdba5

https://blog.csdn.net/mars_xiaolei/article/details/78656860

https://blog.csdn.net/guyanbeifei/article/details/79372074

https://blog.csdn.net/lbship/article/details/81701650

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值