机器学习(day2上)

转换器

 估计器(sklearn机器学习算法的实现)

 

 K-近邻算法

KNN核心思想:

根据你的“邻居”推断你的类别

K-近邻算法(KNN)原理

K=1

        容易收到异常点的影响

如何确定谁是邻居?

计算距离:

        距离公式

曼哈顿距离 绝对距离

明可夫斯基距离

 

 

 K-邻近算法API

 案例1:鸢尾花种类预测

数据集介绍

 

 1获取数据

2数据划分

3特征工程

        标准化

4KNN预估器流程

5模型评估

K-近邻总结

模型选择与调优

 什么是交叉验证

 

 较差验证目的:为了让被评估的模型更加准确可信

超参数搜索-网格搜索

 模型选择与调优API

 案例:预测facebok签到位置

 

 

 

import pandas as pd

#获取数据"
data=pd.read_csv("./train.csv")

data.head()

#基本的数据处理
#缩小数据范围
data=data.query("x<2.5&x>2&y<1.5&y>1.0")

data

#2处理时间特征
time_value=pd.to_datetime(data["time"],unit="s")

time_value.values

date=pd.DatetimeIndex(time_value)

date

date.weekday

date.year

date.month

data["day"]=date.day

data["weekday"]=date.weekday

data["hour"]=date.hour

data.head()

#过滤签到次数少的地点
data.groupby("place_id")

data.groupby("place_id").count()

place_count=data.groupby("place_id").count()

place_count=data.groupby("place_id").count()["row_id"]

place_count

place_count>3

place_count[place_count>3]

place_count[place_count>3].head()

data_final=data[data["place_id"].isin(place_count[place_count>3].index.values)]

data_final

data_final.head()

#筛选特征值和目标值
x=data_final[["x","y","accuracy","day","weekday","hour"]]
y=data_final["place_id"]

x.head()

y.head()

#数据集划分
from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test=train_test_split(x,y)

x_train

x_train,x_test,y_train,y_test=train_test_split(x,y)

x_train

from sklearn.preprocessing import  StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV

#特征工程:标准化
transfer=StandardScaler()
x_train=transfer.fit_transform(x_train)
x_test=transfer.transform(x_test)
#KNN算法预估器
estimator=KNeighborsClassifier()
#加入网络搜索与交叉验证
#参数准备
param_dict={"n_neighbors":[3,5,7,9]}
estimator= GridSearchCV(estimator,param_grid=param_dict,cv=3)
estimator.fit(x_train,y_train)
#模型评估
#方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
    #最佳参数:best_params
print("最佳参数:\n",estimator.best_params_)
    #最佳结果:best_score_
print("最佳结果:\n",estimator.best_score_)
    #最佳估计器best_estmator_
print("最佳估计器:\n", estimator.best_estimator_)
    #交叉验证结果:cv_results_
print("交叉验证结果::\n", estimator.cv_results_)


#好好学习!天天向上!
#今天不学习!明天变废物!
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import  StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
def knn_iris():
    """
    用KNN算法对鸢尾花进行分类
    :return:
    """
    #获取数据
    iris=load_iris()
    #划分数据集
    x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=22)
    #特征工程;标准化
    tranfer= StandardScaler()
    x_train=tranfer.fit_transform(x_train)
    x_test=tranfer.transform(x_test)
    #KNN算法预估器
    estimator=KNeighborsClassifier(n_neighbors=3)
    estimator.fit(x_train,y_train)
    #模型评估
    #方法1直接比对真实值和预测值
    y_predict=estimator.predict(x_test)
    print("y_predict:\n",y_predict)
    print("直接比对真实值和预测值:\n",y_test==y_predict)
    #方法2:计算准确率
    score=estimator.score(x_test,y_test)
    print("准确率为:\n",score)
    return None
    #直接比对真实值和预测值
def knn_iris_gscv():
    """
    用KNN算法对鸢尾花进行分类,添加网格搜索和交叉验证
    :return:
    """
    #获取数据
    iris=load_iris()
    #划分数据集
    x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=22)
    #特征工程;标准化
    tranfer= StandardScaler()
    x_train=tranfer.fit_transform(x_train)
    x_test=tranfer.transform(x_test)
    #KNN算法预估器
    estimator=KNeighborsClassifier()
    #加入网格搜索与交叉验证

    #参数准备
    param_dict={"n_neighbors":[1,3,5,7,9,11]}
    # 模型评估
    # 方法1直接比对真实值和预测值
    y_predict = estimator.predict(x_test)
    print("y_predict:\n", y_predict)
    print("直接比对真实值和预测值:\n", y_test == y_predict)
    # 方法2:计算准确率
    score = estimator.score(x_test, y_test)
    print("准确率为:\n", score)
    #最佳参数:best_params
    print("最佳参数:\n",estimator.best_params_)
    #最佳结果:best_score_
    print("最佳结果:\n",estimator.best_score_)
    #最佳估计器best_estmator_
    print("最佳估计器:\n", estimator.best_estimator_)
    #交叉验证结果:cv_results_
    print("交叉验证结果::\n", estimator.cv_results_)
    return None
    # 直接比对真实值和预测值

    estimator= GridSearchCV(estimator,param_grid=param_dict,cv=10)
    estimator.fit(x_train,y_train)
if __name__ == '__main__':
    #代码1:用KNN算法对鸢尾花进行分类
    # knn_iris()
    #代码2:用KNN算法对鸢尾花进行分类,添加网格搜索和交叉验证
    knn_iris_gscv()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值