第一部分

# KNN
# K最近邻(k-Nearest Neighbor,KNN)分类算法:
# 是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。
# 该方法的思路是:
# 在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别。#  欧几里得距离
# 计算公式(n维空间下)
# 二维:dis=sqrt(  (x1-x2)^2 + (y1-y2)^2  )
# 三维:dis=sqrt( (x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 )import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier  # 分类问题
from sklearn.neighbors import KNeighborsRegressor  # 回归问题
import time# 全局配置pandas
pd.set_option('display.max_columns', None)  # None显示所有列
pd.set_option('display.max_rows', 200)  # None显示所有行
pd.set_option('display.width', None)  # 无限宽度
pd.set_option('display.max_colwidth', 200)  # 设置value的显示长度为100,默认为50
pd.set_option("display.float_format", lambda x: "%0.2f" % (x))  # 保留两位小数# 用pandas展示数据输出时列名不能对齐,是列名用了中文的缘故
# 用下面两个参数 它们的默认设置都是False
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)movie = pd.read_excel("./movies.xlsx", sheet_name=0)
X = movie[["武打镜头", "接吻镜头"]]  # 取出用于分类的数据,数据决定了类型
y = movie["分类情况"]  # y就是目标值,本数据中的最后一列(分类情况)
# 从数据里面找附近的五个数据,五个数据进行投票划分
# witghts 权重分配,默认是uniform统一权重
# n_jobs 默认为1,单线程计算数据模型,-1为多线程,自动按CPU配置使用多线程
knn = KNeighborsClassifier(n_neighbors=5, weights="distance", n_jobs=-1)
knn.fit(X, y)  # 该方法,就是训练数据# print(knn.fit(X, y))
# KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
#                      metric_params=None, n_jobs=None, n_neighbors=5, p=2,
#                      weights='uniform')# 预测新电影
# 电影名称  武打镜头  接吻镜头
# 西游记       100       5
# 水浒传       200       8
# 红楼梦       10       90
# X_test = pd.DataFrame({"武打镜头": [100], "接吻镜头": [5]}) # 测试单个数据
X_test = pd.DataFrame({"武打镜头": [100, 200, 10], "接吻镜头": [5, 8, 90]})
# res = knn.predict(X_test)  # ['动作片' '动作片' '爱情片']
res = knn.predict_proba(X_test)  # 显示概率
# [[0.6 0.4]
#  [0.6 0.4]
#  [0.4 0.6]]# 计算过程:根据欧几里得公式 在第9行  按照西游记给的数据来分解步骤
s = ((movie["武打镜头"] - 100) ** 2 + (movie["接吻镜头"] - 2) ** 2) ** 0.5
# 0    64.01
# 1    57.00
# 2   100.32
# 3    41.01
# 4    99.85
# 5    99.46
# 给s进行排序
index = s.sort_values().index  # 获取排序之后的index  Int64Index([3, 1, 0, 5, 4, 2], dtype='int64')
classifier = movie["分类情况"][index[:5]]
# print(classifier)
# 3    动作片
# 1    动作片
# 0    动作片
# 5    爱情片
# 4    爱情片
# 投票划分:动作片3票,爱情片2票, 3>2,结果为动作片start = time.perf_counter()
print(res)
end = time.perf_counter()
print(f"程序运行耗时为{(start - end).__round__(20)}")

第二部分

import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier  # 分类问题
from sklearn.neighbors import KNeighborsRegressor  # 回归问题
import time# 用pandas展示数据输出时列名不能对齐,是列名用了中文的缘故
# 用下面两个参数 它们的默认设置都是False
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)# 第一步:导入数据
salary = pd.read_excel("./movies.xlsx")
# 第二步:找准目标值数据
y = salary["分类情况"]
# 第三步:找准测试数据
X = salary.iloc[:, [0, 1, 2]]
# print(X)# print(X.info())
# 注意:str类型的数据,是不能计算距离的# 数据预处理。数据转换
workclass = X["电影名称"].unique()
m = {}
for i, work in enumerate(workclass):m[work] = i
# print(m)
X["电影名称"] = X["电影名称"].map(m)  # map在内的字典映射# 假如还有列是字符串类型的数据
for col in X.columns[1:]:  # 遍历所有的字符串类型的列u = X[col].unique()  # 首先找到当前列的去重值   u是去重之后的列表def convert(x):# u是去重之后的列表 x是当前列中每一行的值,因为map会遍历每一行的值# np.argwhere( a ) 返回非0的数组元组的索引,其中a是要索引数组的条件。# 返回的是数组,那条件就是u列表里面的某个数据等于穿过来的x,返回u的索引位置# 返回值如[[5]],使用[0,0]就可以取出这个索引return np.argwhere(u == x)[0, 0]# u = X["电影名称"].unique()    ["西游记","红楼梦","水浒传"]# u == "红楼梦"  [False,True,False]    返回True的索引# np.argwhere(u == "红楼梦")[0, 0]# 拿到convert返回来的索引值,在复制给当前列该行的值X[col] = X[col].map(convert)  # map(可以是字典也可以是方法)from sklearn.model_selection import train_test_split  # 分割训练集和测试集a = np.arange(100)
b = a * 10
# a_train, a_test = train_test_split(a, test_size=0.2)
# a_train, a_test, b_train, b_test = train_test_split(a, b, test_size=0.2)  # 拆分的时候一一对应
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)  # 拆分的时候一一对应
# print(a_train, "\n", a_test)
# print(a_train, "\n", a_test, b_train, "\n", b_test)# print(X.head())
# print(X.columns)# 第四步:声明knn算法对象
knn = KNeighborsClassifier(n_neighbors=4)
# 第五步:测试模型
knn.fit(X_train, y_train)
# 第六步:评估
y_ = knn.predict(X_test)
res = y_ == y_test
res.mean()
# 第七步:优化-,消除属性的差异
# 查看数据是否可以归一化  最大值,最小值
v_min = X.min()
v_max = X.max()
X2 = (X - v_min) / (v_max - v_min)
X2_train, X2_test, y2_train, y2_test = train_test_split(X2, y, test_size=0.2)  # 拆分的时候一一对应
knn2 = KNeighborsClassifier(n_neighbors=4, weights="distance")
knn2.fit(X2_train, y2_train)
y2_ = knn2.predict(X2_test)
res2 = y2_ == y2_test
res2.mean()# 第七步:优化二,Z-score
v_mean = X.mean()
v_std = X.std()
X3 = (X - v_mean) / v_std
X3_train, X3_test, y3_train, y3_test = train_test_split(X3, y, test_size=0.2)  # 拆分的时候一一对应
knn3 = KNeighborsClassifier(n_neighbors=4, weights="distance")
knn3.fit(X3_train, y3_train)
y3_ = knn3.predict(X3_test)
res3 = y3_ == y3_test
res3.mean()# 第七步:优化三 使用封装好的包,和上面的归一化一样StandardScaler,MinMaxScaler
from sklearn.preprocessing import StandardScaler, MinMaxScalers = StandardScaler()  # 和Z-score操作相等
X4 = s.fit_transform(X)  # 返回一个ndarray对象,没有head()方法,DataFrame才有
# print(X4)s2 = MinMaxScaler()  # 和最大值,最小值归一化操作相等
X5 = s2.fit_transform(X)  # 返回一个ndarray对象,没有head()方法,DataFrame才有
# print(X5)# map()方法转成数值型数据  这个过程就是量化  数量化的简称就是量化
# 金融量化,就是把里面一些字符数据转换成合理的数值型数据# 数据提升:
# 修改算法参数
# 处理数据
# 数据挖掘,添加一列(自由组合某一列和另一列聚合之类的操作等等)# 保存模型  externals 美[ɪkˈstɜːrnlz]  外表; 外观; 外貌;
from sklearn.externals import joblib  # 方法被弃用,直接使用下面这个包
import joblib# joblib.dump(knn, "./model")
# joblib.dump(knn, "./model", compress=9)  # 0~9 数字越大,压缩的越小
model = joblib.load("./model")  # 导入模型
score = model.score(X_test, y_test)  # 使用测试集评估准确率start = time.perf_counter()
# print(X_train, "\n", X_test, "\n", y_train, "\n", y_test)
print(score)
end = time.perf_counter()
print(f"程序运行耗时为{(start - end).__round__(20)}")

第三部分















《封号码罗》数据分析与人工智能之KNN分类问题(七)相关推荐

  1. 《封号码罗》数据分析与人工智能之numpy(一)

    # pycharm中的.py文件 """ jupyter的基本使用 一.运行程序快捷键ctrl+Enter 运行并选中本单元alt+Enter 运行并在下面插入新的一行s ...

  2. 《封号码罗》python爬虫之企某科技网站js逆向(十四)

    首先查看ajax加载,可以发现,其所有的数据都是加密方式到前端页面,由前端页面js解密之后再渲染到网页中 根据其关键字 encrypt_data进行全局搜索,寻找js的解密代码 这个地方就是解密代码, ...

  3. 《封号码罗》python爬虫之文字点选型验证码破解一次仅需2分5厘人民币(十)

    不管图片上是两个字,三个字,还是四个字,统统2分5厘 环境的配置自行百度解决 在实际开发环境中,这类验证码反爬通常都是比较难处理的,你要是说自己搞一个CNN卷积神经网络,那我只能说:大佬,带我飞. 对 ...

  4. 《封号码罗》关于js逆向猿人学第一题m值的获取[纯补环境](二十四)

    网上有很多资料,包括视频都讲解了m值的生成方式,但是我自己总是看过之后,有很多疑惑,所以我自己再总结一遍. 抓包看看请求 m值得生成位置 用AST简单解混淆一下,源码就是整个混淆的js复制到本地文件 ...

  5. 《封号码罗》python爬虫之抖音分享页破解字体反爬虫进阶实战(六)

    无敌免责声明:本文主要用于学习技术,切不可用于非法盈利目的,不可用于商业,不可攻击该服务器 先放出结果镇楼: {'nickname': 'Dear-迪丽热巴', '抖音ID': '274110380' ...

  6. 易观于揚:数据分析是人工智能的基础构件

    整理 | 明明.谷磊 2018年1月16日,全球最大中文 IT 社区 CSDN 在北京举办了" AI 生态赋能2018论坛暨 CSDN AI 新战略发布会".在本次发布会上,即将迈 ...

  7. 想学数据分析(人工智能)需要学哪些课程?

    转自:Robin Shen 前言--正本清源:优化理论(运筹学),研究的是如何求解目标函数在约束条件下的最优解.机器学习.人工智能中的绝大部分问题,到最后基本都会归结为求解优化问题,因此学习优化理论是 ...

  8. 2023年五大趋势预测 | 大数据分析、人工智能和云产业展望

    随着我们迈入2023年,大数据分析.人工智能和云产业将迎来蓬勃的创新和发展阶段 以下是我们预测的,将对行业格局产生重大影响的五大趋势: 世界在剧变,我们需要尽快寻找行业中的方向,迅速重回轨道 2023 ...

  9. 人工智能-概述:数据分析---->人工智能【机器学习----->深度学习】

    一.人工智能-简介 人工智能在现实生活中的应用 人工智能发展必备三要素 人工智能和机器学习.深度学习三者之间的关系 BI(数据分析.数据挖掘): Excel: 超级Excel(SPSS.SAS): M ...

最新文章

  1. JAVA常见工具配置
  2. 深入分析ADO.NET中的DataSet对象
  3. jpa配置映射包_JPA – Hibernate –包级别的类型映射
  4. python回归分析实验_python线性回归实验
  5. Redis基础(二)——通用命令和配置
  6. HALCON 21.11:深度学习笔记---模型(8)
  7. 大有可为,忍不住再说下 !
  8. 用socket搭建web服务器(TCP协议)
  9. 一战北邮计专考研经验分享
  10. phonegap app推送新手教程与坑
  11. 软件工程-软件开发的工程思维
  12. 北大青鸟消防控制器组网_北大青鸟JBF-11SF-AC801显示控制盘
  13. ArcMap:线、面符号的制作(通用线符号的制作)超详细
  14. JavaWeb课程设计——名片管理系统
  15. 网购平台用户行为分析
  16. 翻译考试用计算机作答,2021翻译资格水平考试:CATTI考试时间是多久?考试是上机操作吗?...
  17. 应届生和往届生,谁更容易考研成功?
  18. 【python】print函数的用法示例与讲解
  19. windows程序设计读书笔记一
  20. 牛客网算法题 (一) 办公室路径条数解法 Shopee的办公室(二)

热门文章

  1. 拆解64集BBC纪录片,每天看一集,英语水平超9成国人.......
  2. notify和notifyAll
  3. 贵州大数据安全保护建设体系通过专家论证
  4. 每日新闻摘要:针对Android攻击的新型Chrome欺骗了多功能框
  5. 使能全盘加密后的Android ota升级
  6. mysql smalldatetime_datetime与smalldatetime之间的区别
  7. python爬虫详解(四)——使用爬虫爬取你想要的图片 类似于图片下载器【百度引擎】
  8. git compare对比
  9. uni-app 小程序获取实时定位和车辆签到(wx.getLocation方法)
  10. 陕西互联网大会9月举行,聚焦新互联时代陕西机遇