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