sklearn (scikit-learn) 是基于 Python 语言的机器学习工具
简单高效的数据挖掘和数据分析工具
可供大家在各种环境中重复使用
建立在 NumPy ,SciPy 和 matplotlib 上
开源,可商业使用 - BSD许可证
sklearn库的导图
1、数据预处理
数据预处理就是通过对数据的一些转换,取特征,填充等等操作,使得数据组织形式、特征更加符合后续分类算法的要求!!需要一定的经验。
import seaborn as sns
#加载数据集
iris = sns.load_dataset("iris")
#数据清洗,筛去部分特征
iris_simple = iris.drop(["sepal_length", "sepal_width"], axis=1)
iris_simple.head()
#标签编码,将字符串映射为整数
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
iris_simple["species"] = encoder.fit_transform(iris_simple["species"])
#构建训练集和测试集合
from sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(iris_simple, test_size=0.2)
test_set.head()
#分离训练集的特征和标签
iris_x_train = train_set[["petal_length", "petal_width"]]
iris_y_train = train_set["species"].copy()
#分离测试集的特征和标签
iris_x_test = test_set[["petal_length", "petal_width"]]
iris_y_test = test_set["species"].copy()
2、k近邻算法
对某个点做预测,就是将距离该点最近的k个点取出来,并且将该点预测为取出的k个点中最多的那个类别。
from sklearn.neighbors import KNeighborsClassifier
#构建分类器对象,目的就是训练出这个对象
clf = KNeighborsClassifier()
#训练分类器对象
clf.fit(iris_x_train, iris_y_train)
#将训练好的分类器来预测测试集结果
res = clf.predict(iris_x_test)
print(res)
print(iris_y_test.values)
#评估结果
accuracy = clf.score(iris_x_test, iris_y_test)
print("预测正确率:{:.0%}".format(accuracy))
#存储数据
out = iris_x_test.copy()
out["y"] = iris_y_test
out["pre"] = res
out.to_csv("iris_predict.csv")
可视化结果
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
def draw(clf):
# 将数据特征网格化
M, N = 500, 500
x1_min, x2_min = iris_simple[["petal_length", "petal_width"]].min(axis=0)
x1_max, x2_max = iris_simple[["petal_length", "petal_width"]].max(axis=0)
t1 = np.linspace(x1_min, x1_max, M)
t2 = np.linspace(x2_min, x2_max, N)
x1, x2 = np.meshgrid(t1, t2)
# 用分类器预测每一个网格
x_show = np.stack((x1.flat, x2.flat), axis=1)
y_predict = clf.predict(x_show)
# 配色
cm_light = mpl.colors.ListedColormap(["#A0FFA0", "#FFA0A0", "#A0A0FF"])
cm_dark = mpl.colors.ListedColormap(["g", "r", "b"])
# 绘制预测区域图
plt.figure(figsize=(10, 6))
plt.pcolormesh(t1, t2, y_predict.reshape(x1.shape), cmap=cm_light)
# 绘制原始数据点
plt.scatter(iris_simple["petal_length"], iris_simple["petal_width"], label=None,
c=iris_simple["species"], cmap=cm_dark, marker='o', edgecolors='k')
plt.xlabel("petal_length")
plt.ylabel("petal_width")
# 绘制图例
color = ["g", "r", "b"]
species = ["setosa", "virginica", "versicolor"]
for i in range(3):
plt.scatter([], [], c=color[i], s=40, label=species[i]) # 利用空点绘制图例
plt.legend(loc="best")
plt.title('iris_classfier')
#调用函数
draw(clf)
3、朴素贝叶斯
训练集中特征(x1,x2,x3)中出现了结果(y1,y2),如果y1出现的次数比y2多,那么就将特征(x1,x2,x3)预测为y1
from sklearn.naive_bayes import GaussianNB
#构建分类器对象,目的就是训练这个对象
clf = GaussianNB()
#训练
clf.fit(iris_x_train, iris_y_train)
#预测
res = clf.predict(iris_x_test)
print(res)
print(iris_y_test.values)
#评估结果
accuracy = clf.score(iris_x_test, iris_y_test)
print("预测正确率:{:.0%}".format(accuracy))
可视化
draw(clf)
后续的分类算法的使用流程都和上述一致:
1、从sklearn中导入对应的分类器
2、构建分类器对象,我们的目标就是训练这个对象
3、训练分类器对象
4、利用这个训练好的对象预测结果
5、评估结果
6、可视化【可视化就是将数据特征进行网格化,如何用训练好的分类器去预测每一个网格的结果,如何再可视化展示】
说明一下后面的算法思想:
1、决策树:每次都是通过一个特征将数据尽可能分为纯净的两类数据,如果其中一类已经完全存,则完全纯净的类就结束划分,否则迭代下去继续划分。
2、逻辑回归:
训练:通过一个映射方式,将特征X=(x1, x2) 映射成 P(y=ck), 求使得所有概率之积最大化的映射方式里的参数。
预测:计算p(y=ck) 取概率最大的那个类别作为预测对象的分类。
3、支持向量积:以二分类为例,假设数据可用一个超平面将两类数据完全分开(这样的超平面很多),要求是求出每个类别最近点到平面的距离之积最大的那个平面。
文章转载自梁霖编程工具库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。