- 博客(10)
- 收藏
- 关注
原创 用SVM实现垃圾邮件过滤器
支持向量机(SVM)是基于最大间隔的线性分类器,通过确定边界分界面来找到决策分界面,而用来确定边界面的样本点就是支持向量。但是SVM毕竟是线性分类器,对于一些非线性的问题就要通过将样本空间映射到更高维度的特征空间来解决。接下来是用SVM来实现垃圾邮箱过滤器。
2025-05-20 20:19:47
352
原创 逻辑回归解决二分类问题
由于线性回归只能得到一个取值范围在(-∞,+∞)的值并不能用来解决分类问题,逻辑回归基于线性回归模型额外加上了Sigmoid 函数,通过这个函数我们就可以得到一个取值范围为(0,1)的值了,即属于类别一的概率。实现最小化损失函数(最大化似然函数)的过程可以通过使用梯度上升法(梯度下降法)对于数据量较多的数据集,要计算的数据量过于庞大,因此如果每次计算都使用全部样本的话计算量就会很大,因此我们可以采用随机梯度下降法,通过随机选择一个样本点来代替全部样本点来计算,并在每次迭代的过程中更新。
2025-05-06 20:16:43
170
原创 用朴素贝叶斯分类器解决西瓜分类问题
在计算条件概率的同时我们要先明确我们计算的特征的属性,对于西瓜的训练集数据而言,其中“色泽”,“根蒂”,“敲声”,“纹理”,“脐部”,“触感”属于离散属性,而“密度”,“含糖率”属于连续属性。对于这个西瓜的训练集数据来说,总共有“色泽”,“根蒂”,“敲声”,“纹理”,“脐部”,“触感”,“密度”,“含糖率”这8个特征。1.导入数据,这里用到的数据集的特征值为“色泽”,“根蒂”,“敲声”,“纹理”,“脐部”,“触感”,“密度”,“含糖率”。贝叶斯分类器的本质就是用贝叶斯公式计算在该条件下属于这个类别的概率。
2025-05-05 20:28:16
254
原创 决策树中的ID3和CART算法
对比ID3算法,CART算法计算的不是信息增益而是信息增益率,因为ID3算法的缺陷是会偏向于属性值可选择的可能更多的特征,而CART算法在计算信息增益的同时加上了一个比率,从而减小了这一“偏心”的缺点。接下来就是根据计算的信息增益,选择最佳的特征,即选择信息增益最大的属性。所以,计算信息增益就是实现ID3算法的重点。ID3算法是决策树学习算法中的一个经典方法,它主要通过计算。其中Ent(D)指的是熵,信息熵的计算公式如下。实现计算信息增益的代码如下。计算信息增益的公式如下。计算信息增益的代码如下。
2025-04-21 23:51:35
356
原创 机器学习基于混淆矩阵绘制ROC曲线和P-R曲线
这里我对交叉验证法产生了误解,因为绘制P-R曲线和ROC曲线需要多个混淆矩阵得到多个点来连线,但是10折交叉验证法不是用来得到多个混淆矩阵的方法,正确的方法应该是改变判断阈值,导致我的曲线绘制如下。"n_classes"是指分类的类别数,这里'n_classes=2'就是指该分类任务是一个二分类任务,"random_state"是随机种子,用于控制生成数据集的随机性。这里我们用KFold()就可以实现交叉验证法的划分,由于我们需要绘制ROC曲线和P-R曲线,所以我们要计算这两个曲线所用的数据。
2025-04-07 19:28:11
189
原创 基于K近邻算法的分类器的实现(约会网站的分类)
k近邻算法,是我第一次对机器学习的尝试,其中我收获颇丰,学到了可以用归一化对数据进行预处理,大致明白了k近邻算法是如何对数据进行分类操作的,其原理就是根据k个邻居的特征值的占比来对目标值进行预测,并且通过实验结果亲身体会到了k值对kNN算法的影响。显而易见,当k的取值过于大的时候,会严重影响预测的准确度,以此对于kNN算法而言,k值的选取尤为重要,当然距离度量公式也会一定程度的影响最终预测的结果,这些都可以来作为优化KNN算法分类的切入点。当然,除了数据集当中的数据,该分类器也能对用户提供的数据进行预测。
2025-03-23 21:22:56
416
原创 Anaconda配置环境
输入如下代码 这里的"test"是你的环境名,你可以根据自己习惯来定义,后面跟上python的版本。1.先从官网上下载最新版本的anaconda,再把以下三条路径添加到系统变量中的path路径中。3.用以下代码可以查看自己已安装的anaconda版本检验是否成功安装。2.用win+R键打开运行窗口输入cmd进入命令行界面。输入如下代码 这里的"test"是你的环境名。可以尝试在激活环境前先输入如下代码。6.如果你出现了跟我一样的报错。5.激活自己创建的虚拟环境。4.(重点)配置虚拟环境。
2025-03-09 20:08:05
320
原创 暑假第三周学习笔记7.15~7.21
(注意:不是仅仅是属性值类型一样就可以用继承,对于一个学生和一棵树可能都有name,age但是我们要考虑代码的可读性,如果要给这两个对象创建一个父类应该取什么类名呢,所以不是所有的只要有相同类型的属性值就要用继承,要合理运用,而不是学了什么新东西就往里套。之前讲到要访问类里面的成员变量,我们用了this这个关键字,但现在用了继承,我们定义的Student类没有直接写出成员变量,而是在它的父类Person类里面,如果我们想更改其中的值,我们就要用到另一个关键字super他的作用就是可以访问其父类的成员变量。
2024-07-21 21:09:04
621
原创 暑假第二周学习笔记7.8~7.14
方法的重载:你可以定义一个方法(jiafa)因为传入的参数的数据类型的限制,你的这个方法可能只能实现一种数据类型之间的相加,如(int a,int b)就只能两个整数之间相加,但是如果想让这个方法的适用范围更广一些,你可以继续用一个方法名但是其中的参数数据类型不同,如(double a,double b)就可以实现小数之间的加法。split("要分隔的内容")//把字符串分割(如果有多个以空格为分隔的字符串,就可以先用nextLine得到整条字符串,再用这个办法进行分割就可以存放在字符串数组中,方便查找)
2024-07-14 22:47:59
1668
原创 暑假第一周7.3~7.7学习笔记
并且保持每天2道编程题的练习。接下来也要继续加油!规划:趁暑假多多弥补大一的不足,由于大二的课程任务重,所以在暑假期间我得提前学习下学期的课程,如Java,计组等。希望在大二的时候能够获得一点奖项和学到足够的知识,让我能够大二的暑假去尝试实习或者做点项目外包,提升自己的能力,如果能力还是不够做这些,那我就要继续努力考研,争取去985或者211获得更好的资源和更广阔的空间。现状:由于大一的懒散懈怠,导致严重缺乏代码练习,动手写代码能力极差,但专业课成绩还行,说明对代码初具一点点理解,掌握部分理论知识。
2024-07-08 10:23:59
426
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人