sklearn库:分类模型、回归模型、聚类模型、降维模型、模型优化、数据预处理
一、第一个机器学习项目
1.1 导入类库
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import scipy
import sklearn
import matplotlib.pyplot as plt
from pandas.plotting import scatter_matrix
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
1.2 导入数据
iris = pd.read_csv("C:\iris.csv")
#显示数据维度
print('数据维度: 行 %s,列 %s' % iris.shape) # 数据维度: 行 150,列 5
# 查看数据的前10行
print(iris.head(10))
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 0 5.1 3.5 1.4 0.2 setosa
# 1 4.9 3.0 1.4 0.2 setosa
# 2 4.7 3.2 1.3 0.2 setosa
# 3 4.6 3.1 1.5 0.2 setosa
# 4 5.0 3.6 1.4 0.2 setosa
# 5 5.4 3.9 1.7 0.4 setosa
# 6 4.6 3.4 1.4 0.3 setosa
# 7 5.0 3.4 1.5 0.2 setosa
# 8 4.4 2.9 1.4 0.2 setosa
# 9 4.9 3.1 1.5 0.1 setosa
# 统计描述数据信息
print(iris.describe())
# Sepal.Length Sepal.Width Petal.Length Petal.Width
# count 150.000000 150.000000 150.000000 150.000000
# mean 5.843333 3.057333 3.758000 1.199333
# std 0.828066 0.435866 1.765298 0.762238
# min 4.300000 2.000000 1.000000 0.100000
# 25% 5.100000 2.800000 1.600000 0.300000
# 50% 5.800000 3.000000 4.350000 1.300000
# 75% 6.400000 3.300000 5.100000 1.800000
# max 7.900000 4.400000 6.900000 2.500000
# 分类分布情况
print(iris.groupby('Species').size())
# Species
# setosa 50
# versicolor 50
# virginica 50
# dtype: int64
1.3 箱线图
iris.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
plt.show()
1.4 直方图
iris.hist()
plt.show()
1.5 散点矩阵图
scatter_matrix(iris)
plt.show()
1.6 评估算法
通过不同的算法来创建模型,并评估它们的准确度,以便找到最合适的算法。
(1)分离出评估数据集。
(2)采用10折交叉验证来评估算法模型。
(3)生成6个不同的模型来预测新数据。
(4)选择最优模型。
1.6.1 分离数据集
保留一部分数据来评估算法模型,按照80%的训练数据集,20%的评估数据集来分离数据
array = iris.values
X = array[:, 0:4] # data
Y = array[:, 4] # target
validation_size = 0.2 # 20%为测试集
seed = 7
X_train, X_validation, Y_train, Y_validation = train_test_split(X, Y, test_size=validation_size, random_state=seed)
iris.shape # (150, 5)
X_train.shape # (120, 4)
X_validation.shape # (30, 4)
Y_train.shape # (120,)
Y_validation.shape # (30,)
1.6.2 评估模式
在这里将通过10折交叉验证来分离训练数据集,并评估算法模型的准确度。10折交叉验证是随机地将数据分成10份:9份用来训练模型,1份用来评估算法。
1.6.3 创建模型
线性算法
- 线性回归 LR
- 线性判别分析 LDA
非线性算法
- K近邻 KNN
- 分类与回归树 CART
- 贝叶斯分类器 NB
- 支持向量机 SVM
在每次对算法进行评估前都会重新设置随机数的种子,以确保每次对算法的评估都使用相同的数据集,保证算法评估的准确性。
# 算法审查
models = {}
models['LR'] = LogisticRegression()
models['LDA'] = LinearDiscriminantAnalysis()
models['KNN'] = KNeighborsClassifier()
models['CART'] = DecisionTreeClassifier()
models['NB'] = GaussianNB()
models['SVM'] = SVC()
1.6.4 选择最优模型
# 评估算法
results = []
for key in models:
kfold = KFold(n_splits=10, random_state=seed)
cv_results = cross_val_score(models[key], X_train, Y_train, cv=kfold, scoring='accuracy')
results.append(cv_results)
print('模型 %s: 平均 %f (标准差 %f)' %(key, cv_results.mean(), cv_results.std()))
LR:0.966667(0.040825)
LDA:0.975000(0.038188)
KNN:0.983333 (0.033333)
CART:0.975000 (0.038188)
NB:0.975000(0.053359)
SVM:0.991667(0.025000)
data.dtypes
set option(’ display.width ’, l 00)
#设置数据的精确度
set option (’ precision ’, 4)
ata.describe()
data.groupby (‘y’) .size()
数据属性的相关性是指数据的两个属性是否互相影响