机器学习笔记:KNN算法pandas结合scikit-learn实现

1、K-近邻算法:

如果一个样本在特征空间中的K个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别

2、KNN算法流程:

1、计算已知类别中的点与当前点的距离
2、按距离递增次序排序
3、选取与当前点距离最小的K个点
4、统计前K个点所在类别出现的频率
5、返回前K个点出现频率最高的类别作为当前点的预测分类

3、机器学习流程:

1、获取数据
2、数据基本处理
3、特征工程
4、机器学习
5、模型评估

4、 代码实现过程:

'''
    -*- coding: utf-8 -*-
    @Author  : Dongze Xu
    @Time    : 2021/12/15 15:47
    @Function: 
'''
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
'''
    # 1.获取数据集
    # 2.基本数据处理
    # 2.1 缩小数据范围
    # 2.2 选择时间特征
    # 2.3 去掉签到较少的地方
    # 2.4 确定特征值和目标值
    # 2.5 分割数据集
    # 3.特征工程 -- 特征预处理(标准化)
    # 4.机器学习 -- knn+cv
    # 5.模型评估
'''

# 1.获取数据集
data = pd.read_csv("./data/FBlocation/train.csv")
# 2.基本数据处理
# 2.1 缩小数据范围
#选取x∈(2, 2.5); y∈(2, 2.5)
partial_data = data.query("x>2.0 & x<2.5 & y>2.0 & y<2.5")
# 2.2 选择时间特征
#转化为时间格式(年月日形式)
time = pd.to_datetime(partial_data["time"], unit="s")
time = pd.DatetimeIndex(time)
# 2.4 确定特征值和目标值
x = partial_data[["x", "y", "accuracy", "hour", "day", "weekday"]]
y = partial_data["place_id"]
# 2.5 分割数据集
#random_state:随机数种子,test_size:划分
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=2, test_size=0.25)
# 3.特征工程 -- 特征预处理(标准化)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.fit_transform(x_test)

# 4.机器学习 -- knn+cv
# 4.1 实例化一个训练器
estimator = KNeighborsClassifier()
# 4.2 交叉验证,网格搜索实现
param_grid = {"n_neighbors": [3, 5, 7, 9]}
estimator = GridSearchCV(estimator=estimator, param_grid=param_grid, cv=10, n_jobs=4)

# 4.3 模型训练
estimator.fit(x_train, y_train)
# 5.模型评估
# 5.1 准确率输出
score_ret = estimator.score(x_test, y_test)
# 5.2 预测结果
y_pre = estimator.predict(x_test)
# 5.3 其他结果输出
print("最好的模型是:\n", estimator.best_estimator_)
print("最好的结果是:\n", estimator.best_score_)
print("所有的结果是:\n", estimator.cv_results_)

你可能感兴趣的:(深度学习,机器学习,算法,数据挖掘,scikit-learn,pandas)