基于SVM进行排序实验-相关函数笔记

本文详细解读了基于SVM的排序实验,涵盖了Python中urlretrieve的使用、urllib的下载功能、代理设置以及多线程下载。此外,还介绍了os.chdir()方法、Python字典的values()和keys()方法、Pandas DataFrame的iloc和loc选择器,以及数据洗牌技巧。同时,文章讲解了pandas的replace和map方法,以及SVM中的sample_weight参数和Logistics Regression的coef_和intercept_。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于SVM进行排序实验-相关函数笔记
解读源代码博客-https://github.com/chunyanyin11/SVMraninking/blob/master/code SVM_copd.ipynb

  1. python3的urlretrieve使用方法
    urllib模块提供的urlretrieve()函数。urlretrieve()方法直接将远程数据下载到本地。

urlretrieve(url, filename=None, reporthook=None, data=None)
参数介绍:
参数filename指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)参数reporthook是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
参数data指post导服务器的数据,该方法返回一个包含两个元素的(filename, headers) 元组,filename 表示保存到本地的路径,header表示服务器的响应头

urlopen()可以轻松获取远端html页面信息,然后通过Python正则对所需要的数据进行分析,匹配出想要用的数据,再利用urlretrieve()将数据下载到本地。对于访问受限或者对连接数有限制的远程url地址可以采用proxies(代理的方式)连接,如果远程连接数据量过大,单线程下载太慢的话可以采用多线程下载,这个就是传说中的爬虫

本部分来自 fengzhizi76506 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/fengzhizi76506/article/details/59229846?utm_source=copy

  1. Python os.chdir() 方法
    os.chdir() 方法用于改变当前工作目录到指定的路径。
    chdir()方法语法格式如下:
    os.chdir(path)
    参数
    path – 要切换到的新路径。
    返回值
    如果允许访问返回 True , 否则返回False。

    查看当前工作目录
    retval = os.getcwd()
    print “当前工作目录为 %s” % retval

  2. Python 字典(Dictionary) values()方与 keys()方法

    Python 字典(Dictionary) values() 函数以列表返回字典中的所有值。
    values()方法语法:
    dict.values()

    Python 字典(Dictionary) keys() 函数以列表返回一个字典所有的键。
    keys()方法语法:
    dict.keys()

  3. Python-Pandas 如何shuffle(打乱)数据
    在Python里面,使用Pandas里面的DataFrame来存放数据的时候想要把数据集进行shuffle会许多的方法,本文介绍两种比较常用而且简单的方法。
    实现方法:
    最简单的方法就是采用pandas中自带的 sample这个方法。
    假设df是这个DataFrame
    df.sample(frac=1)
    这样对可以对df进行shuffle。其中参数frac是要返回的比例,比如df中有10行数据,我只想返回其中的30%,那么frac=0.3。

    有时候,我们可能需要打混后数据集的index(索引)还是按照正常的排序。我们只需要这样操作
    df.sample(frac=1).reset_index(drop=True)
    本文来自 kingsam_ 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/qq_22238533/article/details/70917102?utm_source=copy

  4. python选取特定列——pandas的iloc和loc以及icol使用(列切片及行切片)
    一、选取标签为A和C的列,并且选完类型还是dataframe
    df = df.loc[:, [‘A’, ‘C’]]
    df = df.iloc[:, [0, 2]]
    二、选取标签为A和C并且只取前两行,选完类型还是dataframe
    df = df.loc[0:2, [‘A’, ‘C’]]
    df = df.iloc[0:2, [0, 2]]
    聪明的朋友已经看出iloc和loc的不同了:loc是根据dataframe的具体标签选取列,而iloc是根据标签所在的位置,从0开始计数。
    ",“前面的”:"表示选取整列,第二个示例中的的0:2表示选取第0行到第二行,这里的0:2相当于[0,2)前闭后开,2是不在范围之内的。
    需要注意的是,如果是df = df.loc[0:2, [‘A’, ‘C’]]
    或者df = df.loc[0:2, [‘A’, ‘C’]],切片之后类型依旧是dataframe,不能直接进行加减乘除等操作的。
    比如dataframe的一列是数学成绩(shuxue),另一列为语文成绩(yuwen),现在需要求两门课程的总和。可以使用df[‘shuxue’] + df[‘yuwen’](选取完之后类型为series)来获得总分,而不能使用df.iloc[:,[2]]+df.iloc[:,[1]]或df.iloc[:,[‘shuxue’]]+df.iloc[:,[‘yuwen’]],这会产生错误结果
    还有一种方式是使用df.icol(i)来选取列,选取完的也不是dataframe而是series,i为该列所在的位置,从0开始计数。如果你想要选取某一行的数据,可以使用df.loc[[i]]或者df.iloc[[i]]。

本文来自 chenKFKevin 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/chenKFKevin/article/details/62049060?utm_source=copy

  1. pandas映射,replace和map
    replace
    df[‘消费性别倾向’] = df[‘消费性别倾向’].replace(2,‘女’)
    传入表示映射关系的字典作为参数
    food = {’<=100’:‘1’,‘100-500’:‘2’,‘500-1000’:‘3’,‘1000-3000’:‘4’,’>3000’:‘5’}
    df[‘工作日消费指数’] = df[‘工作日消费金额’].replace(food)
    map
    food = {’<=100’:‘1’,‘100-500’:‘2’,‘500-1000’:‘3’,‘1000-3000’:‘4’,’>3000’:‘5’}
    df[‘工作日消费指数’] = df[‘工作日消费金额’].map(food)

    本文来自 SherryGo 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/xueruixuan/article/details/80237481?utm_source=copy

  2. y_lin_weight = svr_lin.fit(x_train, y_train, sample_weight=weights).predict(x_train)
    sample_weight=weights:为样本设定权重,解决样本不平衡问题
    y_lin = svr_lin.fit(x_train, y_train).predict(x_train):未设定权重的表达方式

  3. sklearn 中 Logistics Regression 的 coef_ 和 intercept_ 的具体意义
    coef_应该是一次项系数,而intercept_应该是截距
    https://blog.youkuaiyun.com/u010099080/article/details/52933430
    In [606]: svr_lin.coef_.shape
    Out[606]:(1, 647)
    In [607]:svr_lin.coef_#查看每个特征的权重系数

  4. [Matplotlib] subplot相关博客 https://bookdata.readthedocs.io/en/latest/beginning/04_matplotlib.html

  5. Python3 range() 函数用法
    Python3 内置函数
    Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。
    Python3 list() 函数是对象迭代器,可以把range()返回的可迭代对象转为一个列表,返回的变量类型为列表。
    Python2 range() 函数返回的是列表。

函数语法
range(stop)
range(start, stop[, step])
参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
实例

	>>>range(5)
		range(0, 5)
		>>> for i in range(5):
		...     print(i)
		... 
		0
		1
		2
		3
		4
		>>> list(range(5))
		[0, 1, 2, 3, 4]
		>>> list(range(0))
		[]
  1. Y.shape[0] The shape attribute for numpy arrays returns the dimensions of the array. If Y has n rows and m columns, then Y.shape is (n,m). So Y.shape[0] is n.Y.shape[1] is m.

  2. Numpy库学习—squeeze()函数
    语法:numpy.squeeze(a,axis = None)
    1)a表示输入的数组;
    2)axis用于指定需要删除的维度,但是指定的维度必须为单维度,否则将会报错;
    3)axis的取值可为None 或 int 或 tuple of ints, 可选。若axis为空,则删除所有单维度的条目;
    4)返回值:数组
    5 ) 不会修改原数组;

    作用:从数组的形状中删除单维度条目,即把shape中为1的维度去掉
    引用:https://docs.scipy.org/doc/numpy/reference/generated/numpy.squeeze.html
    场景:在机器学习和深度学习中,通常算法的结果是可以表示向量的数组(即包含两对或以上的方括号形式[[]]),如果直接利用这个数组进行画图可能显示界面为空(见后面的示例)。我们可以利用squeeze()函数将表示向量的数组转换为秩为1的数组,这样利用matplotlib库函数画图时,就可以正常的显示结果了。
    
  3. level3 = svr_lin.support_vectors_[2]
    获得支持向量点,参考博客https://www.jianshu.com/p/4a386424fa5b获得支持向量点,参考博客https://www.jianshu.com/p/4a386424fa5b

  4. 基于matplotlib画图讲解较好的博客:https://www.jianshu.com/p/78ba36dddad8 强烈推荐
    5. 未读懂部分

In [612]:
import numpy as np
l3id = pd.DataFrame(list(zip(data.keys()[2:],level3,
                             svr_lin.coef_.squeeze())),
                    columns = ["chem", "SVC3", "SVC_coeff"]
                   )
In [614]:
l3id[l3id["SVC_coeff"]>0].sort_values(by="SVC3", ascending=False)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值