机器学习08--实战案例

案例1:K-近邻算法预测Facebook签到位置

数据介绍

row_id:登记事件的ID

xy:坐标

准确性:定位准确性

时间:时间戳

place_id:业务的ID,预测目标

代码

from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
import pandas as pd

def knncls():
    """
    K近邻算法预测入住位置类别
    :return:
    """
    # 一、处理数据以及特征工程
    # 1、读取收,缩小数据的范围
    data = pd.read_csv("../dataset/train.csv")

    # 数据逻辑筛选操作 df.query()
    data = data.query("x > 1.0 & x < 1.25 & y > 2.5 & y < 2.75")

    # 删除time这一列特征
    data = data.drop(['time'], axis=1)

    print(data)

    # 删除入住次数少于三次位置
    place_count = data.groupby('place_id').count()

    tf = place_count[place_count.row_id > 3].reset_index()

    data = data[data['place_id'].isin(tf.place_id)]

    # 3、取出特征值和目标值
    y = data['place_id']
    # y = data[['place_id']]

    x = data.drop(['place_id', 'row_id'], axis=1)

    # 4、数据分割与特征工程

    # (1)、数据分割
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)

    # (2)、标准化
    std = StandardScaler()

    # 训练集进行标准化操作
    x_train = std.fit_transform(x_train)

    # 进行测试集的标准化操作
    x_test = std.transform(x_test)

    # 4)KNN算法预估器
    estimator = KNeighborsClassifier()

    # 加入网格搜索与交叉验证
    # 参数准备
    param_dict = {"n_neighbors": [3, 5, 9, 11]}
    estimator = GridSearchCV(estimator, param_grid=param_dict, cv=2)
    estimator.fit(x_train, y_train)

    # 5)模型评估
    # 方法1:直接比对真实值和预测值
    y_predict = estimator.predict(x_test)
    print("y_predict:
", y_predict)
    print("直接比对真实值和预测值:
", y_test == y_predict)

    # 方法2:计算准确率
    score = estimator.score(x_test, y_test)
    print("准确率为:
", score)

    # 最佳参数:best_params_
    print("最佳参数:
", estimator.best_params_)
    # 最佳结果:best_score_
    print("最佳结果:
", estimator.best_score_)
    # 最佳估计器:best_estimator_
    print("最佳估计器:
", estimator.best_estimator_)
    # 交叉验证结果:cv_results_
    print("交叉验证结果:
", estimator.cv_results_)
    return None

if __name__ == '__main__':
    knncls()

原文地址:https://www.cnblogs.com/MoooJL/p/14323077.html