scikit-learn库

机器学习算法库scikit-learn库–解决分类与回归问题

  1. 以鸢尾花数据集为例

下载数据集:import seaborn as sns iris = sns.load_dataset("iris")
数据集查看:type(iris) iris.shape iris.head() iris.info() iris.describe() iris.species.value_counts #统计字符串元素种类及数量 sns.pairplot(data=iris, hue="species"
数据清洗:iris_simple = iris.drop(["sepal_length", "sepal_width"], axis=1)
标签编码:from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() iris_simple["species"] = encoder.fit_transform(iris_simple["species"])
数据标准化:

from sklearn.preprocessing import ScandardScaler
from pandas as pd

trans = StandardScaler()
_iris_simple = trans.fit_transform(iris_simple[["petal_length", "petal_width"]])
_iris_simple = pd.DataFrame(_iris_simple, columns=["petal_length", "petal_width")

构建训练集和测试集:

from sklearn.model_selection import train_test_split

train_set, test_set = train_test_split(iris_simple, test_size=scale)
iris_x_train = train_set[["petal_length", "petal_width"]]
iris_y_train = train_set["species"].copy() 
iris_x_text = test_set[["petal_length", "petal_width"]]
iris_y_test = test_set["species"].copy()
  1. 八大传统机器学习分类算法
    2.1 k临近算法:待测点最近的k个邻居中最常见的类别
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier #构建分类器对象
clf.fit(iris_x_train, iris_y_train) #训练
res = clf.predict(iris_x_text)#预测
encoder.inverse_transform(res)#翻转
accuracy = clf.score(iris_x_test, iris_y_test)#评估
out = iris_x_text.copy()#存储数据
out["y"] = iris_y_test
out["pre"] = res
put.to_csy("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))
	mpl.pcolormesh(t1, t2, y_predict.reshape(x1.shape), cmap=cm_light)
	#绘制散点
	plt.scatter(iris_simple["petal_length"], iris_simple["petal_width"], c=iris_simple["species"], label=None, cmap=cm_dark, marker="o", edgecolors="k")
	plt.xlabel("petal_length")
	plt.ylabel("petal_width")
	plt.title("iris_classfier")
	#绘制图例
	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")

draw(clf)

2.2 朴素贝叶斯算法:当特征值X=(x1, x2)发生的时候,哪一个类yk发生的概率最大。from sklearn.naive.bayes import GaussianNB

2.3 决策树算法:每次通过一个特征,将数据尽可能的氛围纯净的两类,递归的分下去。from sklearn.tree import DecisionTreeClassifier

2.4 逻辑回归算法:from sklearn.linear_model import LogisticRegression
训练:通过一个映射方式,将特征X=(x1, x2)映射称P(y=ck),求使得所有概率之积最大化的映射方式里的参数。
预测:计算p(y=ck)取概率最大的那个类别作为预测对象的分类。
2.5 支持向量机算法:如二分类,用一个超平面将两类数据完全分开,且最近点到平面的距离最大。from sklearn.svm from SVC
2.6 集成方法–随机森林:训练集m,有放回的随机抽取m个数据,构成一组,共抽取n组采样;n组采样集训练得到n个弱分类器,弱分类器一般用决策树或神经网络;将n个弱分类器进行组合得到强分类器。from sklearn.ensemble import RandomForestClassifier
2.7 集成方法–Adaboost:训练集m,用初始数据权重训练得到第一个弱分类器,根据误差率计算弱分类器系数,更新数据的权重;使用新的权重训练得到第二个弱分类器,以此类推;根据各自系数,将所有弱分类器加权求和获得强分类器。from sklearn.ensemble import AdaBoostClassifier
2.8 集成方法–梯度提升数GBDT:训练集m,获得第一个弱分类器,获得残差,然后不断地拟合残差;所有弱分类器相加得到强分类器。from sklearn.ensemble import GradientBoostingClassifier

  1. 其他有效方法
    3.1 xgboost:GBDT的损失函数只对误差部分做负梯度(一阶泰勒)展开,XGBoost损失函数对误差部分做二阶泰勒展开,更加准确,更快收敛。
    3.2 lightgbm:快速、分布式、高性能的基于决策树算法的梯度提升框架,速度更快
    3.3 stacking:堆叠,又称模型融合,先建立几个简单的模型进行训练,第二级学习器会基于前级模型的预测结果进行再训练。
    3.4 神经网络
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值