1.简介
机器学习流程
1.获取数据集 |
2.数据基本处理 |
3.特征工程 |
4.机器学习 |
5.模型评估 |
Scikit-learn工具
安装
pip3 install scikit-learn
查看是否安装成功
import sklearn
API
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5) |
n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数 |
简单使用
from sklearn.neighbors import KNeighborsClassifier
# 可以把x理解为 excel 表格中一列,每一行就是一个样本
# 只不过这里样本比较简单,只是一维的
x = [[0],
[1],
[2],
[3]]
y = [0, 0, 1, 1]
# 实例化API
estimator = KNeighborsClassifier(n_neighbors=1)
# 使用fit方法进行训练\
# fit函数需要传递两个值,一个特征值,一个目标值
estimator.fit(x, y)
# predict 预测函数
print(estimator.predict([
[1],
[100]
]))
常见距离公式
欧式距离
曼哈顿距离
切比雪夫距离
闵可夫斯基距离
K值的选择
-
K值过小:
- 容易受到异常点的影响
- 容易过拟合
-
k值过大:
- 受到样本均衡的问题
- 容易欠拟合
KD树
scikit-learn数据集API介绍
案例一
from sklearn.datasets import load_iris
# 获取鸢尾花数据集
iris = load_iris()
print("鸢尾花数据集的返回值:\n", iris)
# 返回值是一个继承自字典的Bench
print("鸢尾花的特征值:\n", iris["data"])
print("鸢尾花的目标值:\n", iris.target)
print("鸢尾花特征的名字:\n", iris.feature_names)
print("鸢尾花目标值的名字:\n", iris.target_names)
print("鸢尾花的描述:\n", iris.DESCR)
from sklearn.datasets import load_iris
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 获取鸢尾花数据集
iris = load_iris()
# 把数据转换成dataframe的格式
iris_d = pd.DataFrame(iris['data'], columns = ['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])
iris_d['Species'] = iris.target
def plot_iris(iris, col1, col2):
sns.lmplot(x = col1, y = col2, data = iris, hue = "Species", fit_reg = False)
plt.xlabel(col1)
plt.ylabel(col2)
plt.title('鸢尾花种类分布图')
plt.show()
plot_iris(iris_d, 'Petal_Width', 'Sepal_Length')
数据集划分api
- sklearn.model_selection.train_test_split(arrays, *options)
- 参数:
- x 数据集的特征值
- y 数据集的标签值
- test_size 测试集的大小,一般为float
- random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
- return
- x_train, x_test, y_train, y_test
- 参数:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 1、获取鸢尾花数据集
iris = load_iris()
# 对鸢尾花数据集进行分割
# 训练集的特征值x_train 测试集的特征值x_test 训练集的目标值y_train 测试集的目标值y_test
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
print("x_train:\n", x_train.shape)
print("y_train:\n", y_train.shape)
print("x_test:\n", x_test.shape)
print("y_test:\n", y_test.shape)
# 随机数种子
x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=6)
x_train2, x_test2, y_train2, y_test2 = train_test_split(iris.data, iris.target, random_state=6)
print("如果随机数种子不一致:\n", x_train == x_train1)
print("如果随机数种子一致:\n", x_train1 == x_train2)
特征预处理
归一化:通过对原始数据进行变换把数据映射到(默认为[0,1])之间
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
data = pd.read_csv("./data/dating.txt")
print(data)
# 1、实例化一个转换器类
transfer = MinMaxScaler(feature_range=(2, 3))
# 2、调用fit_transform
data1 = transfer.fit_transform(data[['milage','Liters','Consumtime']])
data2= transfer.fit_transform(data[:])
print("最小值最大值归一化处理的结果:\n", data1)
print(data1.shape)
print("最小值最大值归一化处理的结果:\n", data2)
print(data2.shape)
标准化
import pandas as pd
from sklearn.preprocessing import StandardScaler
"""
标准化演示
"""
data = pd.read_csv("./data/dating.txt")
print(data)
# 1、实例化一个转换器类
transfer = StandardScaler()
# 2、调用fit_transform
data = transfer.fit_transform(data[['milage','Liters','Consumtime']])
print("标准化的结果:\n", data)
print("每一列特征的平均值:\n", transfer.mean_)
print("每一列特征的方差:\n", transfer.var_)