机器学习算法探索

目录

一、K近邻(KNN)

1、K近邻算法概述

2、算法图示

3、算法的要点:

3.1算法计算步骤

4、算法的不足

二、朴素贝叶斯算法

1、算法概述

2、算法的核心思想



一、K近邻(KNN)

1、K近邻算法概述

K近邻算法属于分类算法,属于比较简单的算法,核心思想是“近朱者赤,近墨者黑”,根据临近样本计算自身的标签。

2、算法图示

  • 从最近的K个样本的标签,依据少数服从多数的原则确定自身的标签;
  • 三要素:训练数据集、距离度量(欧氏距离)、K值选择。

 算法运行流程描述:

        上图显示的是不同样本的展示,绿点是新样本,新样本的标签的确定就是依据附近的点确定,采用的原则是少数服从多的原则,选取离该点最近的K个点。

3、算法的要点:

3.1算法计算步骤

         计算步骤如下:

                算距离:给定样本与训练数据集中有点样本计算距离(欧氏距离),然后排序;

                找邻居:确定K个距离最近的值,从上一步的排序中取前K个值;

                打标签:依据选定的K个值的标签,采用少数服从多数的原则。

        相似度计算:

                相似度衡量:两个向量的距离衡量其相似度,越近越相似。

                计算方式:采用欧氏距离、夹角余弦等。

        类别的判定:

                采用少数服从多数的方法进行确定新样本的标签。 

4、算法的不足

        该算法适合平衡样本,数据量比较比较大。当样本比较小,且样本不平衡时容易造成偏向于样本多的特征,造成错误分类。

改善的方法:给与离新样本最近的样本点大的权重,确定其标签。

二、朴素贝叶斯算法

1、算法概述

        朴素贝叶斯算法是贝叶斯算法的统称,属于概率算法,通过计算样本所属的类别概率,获取概率最大的作为样本的最终的概率。

朴素:条件概率独立性

2、算法的核心思想

朴素贝叶斯的核心思想是,某件事在一些属性条件下随机发生,事件发生属于A的概率大于属于B的概率,那么该事件的判定为A。

 三、logistic逻辑回归

    1、算法概述

    

# -*— coding:utf-8 -*-
# @time   :2021/11/5 17:01
# @Author :zhangzhoubin
'''
1、爬虫:又称网页蜘蛛,是将网页数据按照需要进行抽取,存储到本地数据库中,用于我们构建模型进行数据分析,获取数据中所需的价值。
2、web与http协议的工作流程:
客户端浏览器---url---远程服务器  (超文本传输协议http,客户端通过超文本传输协议对于远程服务器进行请求,服务器端对于请求进行响应)
3、爬虫的流程
(1)确定需求;(2)寻求需求;(3)发送请求;(4)解析数据;(5)存储数据
4、请求方式
get:get是http默认的请求该方式,直接通过链接进行访问,链接中直接附带 相关的参数;缺点:参数直接暴露在链接中,不安全;
post:post方法主要向web提交表单数据,涉及向服务器提交表单的过程,一般采购post请求;优势:相比get请求安全,参数信息不再链接中。
5、Requests
request是Python代码请求的工具。
'''

'''
功能:利用requests进行访问链接,获取所需的信息。
'''
# import requests
# #requests请求网站
# url='https://www.baidu.com/'
# res=requests.get(url=url)  #发起get请求
# print(res)  #获取相应的结果
# print(res.content)  #获取相应的内容(b'.....':二进制的文本流)
# print(res.content.decode('utf-8'))   #将二进制文本流转换成utf-5
# print(res.url)  #请求的链接
# print(res.text)   #响应的内容
# print(res.headers)  #响应头信息
# print(res.request.headers)  #响应头信息()
# print(res.status_code)  #响应的状态码

'''
功能:发送请求,主要解决远程服务器拒绝爬虫工具访问,
'''
# import requests
# # url='https://www.lmonkey.com/'
# url='https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_f05509cc4e6744568d6ff57a3919bfbc'
#
# '''res=requests.get(url=url) 访问远程服务器是以python访问的(爬虫工具访问),如果远程服务器允许访问则返回的是200,如果拒绝访问则返回其他,
# 并且访问不到任何内容。
# 基于以上存在的问题,主要的原因是'User-Agent': 'python-requests/2.26.0'导致的,有些网页限制爬虫,就需要采用浏览器的方式访问,
# 格式如:user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
# '''
# #拒绝访问的解决方法
# # headers={
# # 'User-Agent':'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
# #              ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
# # }
# # res=requests.get(url=url,headers=headers)
#
# res=requests.get(url=url)
# print(res.request.headers)
# #获取响应状态码
# sta_coda=res.status_code
# print(sta_coda)
# if sta_coda==200:
#     with open('./test.html','w',encoding='utf-8') as fp:
#         fp.write(res.text)

# '''
# 功能:post发送请求,requeests 请求头的定义,可以避免网页对于爬虫的限制,通过伪装为浏览器的方式顺利访问。
# '''
# import requests
# #定义请求URL
# url='https://fanyi.baidu.com/?aldtype=16047#auto/zh'
# #定义头文件
# headers={
# 'User-Agent':'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
#               ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
#
# }
# #post发送数据
# data={'k':'您好'}
# #发送请求
# res=requests.post(url=url,headers=headers,data=data)
# #接收返回数据
# print(res.status_code)
# print(res.content)

'''
coookie:http请求是无状态请求,不会记住用户的状态和信息,也不清楚用户之前访问过什么,但是网站需要记住用户是否登记时,就需要在用户登录后
创建一些信息,并且 要把这些信息记录在当前的用户的浏览器中记录的内容就是cookie,用户继续使用当前网站时,浏览器就会主动携带这个网站设置的cookie信息
cookie会在浏览器中记录信息,并且在访问时携带这个信息。浏览器更换或者删除cookie信息将丢失,cookie在浏览器中记录信息是不安全,因为不能记录敏感信息。

session:是在服务器端进行数据的记录,并且在给每个用户会生成一个sessionID,并且把这个sessionID设置在和用户的浏览器中,也就是设置为cookie
'''
'''
功能:使用cookie记录的信息进行网页访问
'''
# import requests
#
# url='https://www.imooc.com/'
# #定义头文件
# headers={
# 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36''AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
# }
# res=requests.get(url=url,headers=headers)
# if res.status_code==200:
#     print("请求成功")
#     with open('./train.html','w',encoding='utf-8') as fp:
#         fp.write(res.text)
#         print("响应成功")

'''
XPath是XML路径语言,主要用于在XML文档中查找信息的语言,最初主要用于搜寻XML文档中,同时也适用于HTML文档中搜索资源,因此可以
用于爬虫时对于信息的抽取。
XPath常用规则:
nodename:选取此节点的所有子节点;
/ :选取当前节点的直接子节点;
// :选取当前节点的子孙节点;
. :选取当前节点;
.. :选取当前节点的父节点;
@ :选取属性
'''
'''
功能:XPath基本使用
'''
# from lxml import etree
# text='''
# <!DOCTYPE html>
# <html lang='zh-CN'>
# <head>
#     <meta charset="UTF-8">
#     <title>学习猿地-成就自我</title>
# <head>
# <body>
#     <ul>
#         <li><a href="/a/b/c/java/">java工程师</a></li>
#         <li><a href="/a/b/c/python/">python工程师</a></li>
#         <li><a href="/a/b/c/ai/">AI工程师</a></li>
#     </ul>
# </body>
# </html>
# '''
# #使用etree解析html字符串
# html=etree.HTML(text)
# print(html)
# #提取数据
# r=html.xpath('/html/body/ul/li/a/text()')
# print(r) #['java工程师', 'python工程师', 'AI工程师']
# #获取xpath中多个子节点中一个子节点的信息
# r1=html.xpath('/html/body/ul/li[2]/a/text()')
# print(r1)  #['python工程师']

'''
功能:xpath的使用方式
'''
from lxml import etree

#第一种解析的方法
# with open('./test1.html','r',encoding='utf-8') as rf:
#     content=rf.read()
#     html1=etree.HTML(content)
#     res1=html1.xpath('/html/body/ul/li/a/text()')
#     print(res1)

# # #第二种解析的方法
# res2=etree.parse('./test1.html',etree.HTMLParser())
# res=res2.xpath('/html/body/ul/li/a/text()')
# print(res)

# #获取指定标签下的数据
# res2=etree.parse('./test1.html',etree.HTMLParser())
# # res=res2.xpath('//ul[@class="student"]/li/a[@re="/a/b/c/python/"]/text()')
# # print(res)
# #获取属性的名字
# res=res2.xpath('//ul[@class="student"]/li[1]/a/@re')
# print(res)

'''
功能:Xpath实战,实现 网站登录
'''
'''
自动登录网站的流程:
1)get请求login页面,设置cookie,获取_token
2)post请求,提交登录数据,进行登录,并且设置cookie
3)get请求,账户中心,获取默认的订单号
'''
# import requests
# from lxml import etree
#
# class LMonKey():
#     loginurl='https://www.lmonkey.com/login'
#     orderurl='https://www.lmonkey.com/my/order'
#     headers={
#        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
#     }
#     #请求对象
#     req=None
#     _token=''
#     order_code=0
#     #请求初始化
#     def __init__(self):
#         self.req=requests.sessions()
#         if self.getlogin():
#             if self.postlogin():
#                 self.getorder()
#
#     #get登录页面,获取_token
#     def getlogin(self):
#         #get请求login,设置cookie,获取_token
#         res=self.req.get(url=self.loginurl,headers=self.headers)
#         if res.status_code==200:
#             print('get请求成功')
#             html=etree.HTML(res.text)
#             self.token=html.xpath('//input[@name="_token"]/@value')[0]
#             print(self.token)
#             print("token获取成功")
#             return True
#         else:
#             print("请求错误")
#
#     #post请求登录,设置cookie
#     def postlogin(self):
#         uname=input("手机号")
#         passw=input("密码")
#         data={
#             '_token':self.token,
#             'username':uname,
#             'password':passw
#         }
#         #发送post请求
#         res=self.req.post(url=self.loginurl,headers=self.headers,data=data)
#         if res.status_code==200 or res.status_code==302:
#             print("登录成功")
#             return True
#     #get请求账户中心,获取边订单号
#     def  getorder(self):
#         pass
#         res=self.req.get(url=self.orderurl,headers=self.headers)
#         if res.status_code==200:
#             print("账户中心请求成功,正在解析数据")
#             html=etree.HTML(res.text)
#             r=html.xpath('//div[@class="avatar-content"//small/text()]')
#             self.order_code=r
#             print(r)
#             return True
#
#
# obj=LMonKey()
'''
xpath实战,爬取文章
'''
#导入所需库
import requests,json
from lxml import etree


def  data_get():
    #请求链接
    url='https://www.lmonkey.com/t'
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
    }
    #发送请求
    res=requests.get(url=url,headers=headers)
    if res.status_code==200:
        print("请求成功")
        with open('./yz.html','w',encoding='utf-8') as fp:
            fp.write(res.text)
    filepath='./yz.html'
    return filepath

def  data_slove(filepath):
    #解析数据
    html=etree.parse('./yz.html',etree.HTMLParser())
    #提取数据 文章标题、文章地址url
    title=html.xpath('/html/body/div[12]/div/div/main/div[3]/div[1]/div/div[2]/h2/a/span/span/text()')
    auter=html.xpath('/html/body/div[12]/div/div/main/div[3]/div[1]/div/div[1]/div/div[2]/p/a/span/span/text()')
    auters=[]
    #对于数据的清洗
    for i in auter:
        auters.append(i.strip())
        print(auters)
    data=html.xpath('/html/body/div[12]/div/div/main/div[1]/div[2]/div[1]/div/div[2]/a/time/span/span/text()')
    a=zip(title,auters,data)
    content=[]
    for i,j,k in a:
        print()
        b={"标题":i,'作者':j,'日期':k}
        content.append(b)
    print(content)
    return content
def data_write(content):
    with open('./data.json','w',encoding='utf-8') as fp:
        fp.write(json.dumps(content))
        print("数据加载完成!")

if __name__=='__main__':
    file_path=data_get()
    content=data_slove(file_path)
    data_write(content)







おすすめ

転載: blog.csdn.net/zhangzhoubin666/article/details/121204653