机器学习中常见的六种分类算法(附Python源码+数据集)

今天和大家学习一下机器学习中常见的六种分类算法,如K近邻、决策树、朴素贝叶斯、逻辑回归、支持向量机、随机森林

除了介绍这六种不同分类算法外,还附上对应的Python代码案例,并分析各自的优缺点。

01

K近邻(KNN)

64a9fa7767a76de9220209b05f200d67.png

k-近邻算法KNN就是K-Nearest neighbors Algorithms的简称,它采用测量不同特征值之间的距离方法进行分类,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。

  代码案例

数据集:iris.csv(文末会提供)

import pandas as pd
import numpy as np
import operator
# 导入数据
data = pd.read_csv("iris.csv")

1534c64c49c93ff17bface74adb26f39.png

前四列为特征,最后一列为类别

欧几里距离

# 计算两个数据点之间的欧几里德距离
def euclideanDistance(data1, data2, length):
    distance = 0
    for x in range(length):
        distance += np.square(data1[x] - data2[x])
    return np.sqrt(distance)

KNN模型

# KNN 模型
def knn(trainingSet, testInstance, k):
    distances = {}
    sort = {}
    length = testInstance.shape[1]
    # 计算每行训练数据和测试数据之间的欧氏距离
    for x in range(len(trainingSet)):
        dist = euclideanDistance(testInstance, trainingSet.iloc[x], length)
        distances[x] = dist[0]
        # 根据距离对它们进行排序
        sorted_d = sorted(distances.items(), key=operator.itemgetter(1))
    neighbors = []
    # 提取前 k 个邻居
    for x in range(k):
        neighbors.append(sorted_d[x][0])
    classVotes = {}
    # 计算邻居中频率最高的类别
    for x in range(len(neighbors)):
        response = trainingSet.iloc[neighbors[x]][-1]
        if response in classVotes:
            classVotes[response] += 1
        else:
            classVotes[response] = 1

    sortedVotes = sorted(classVotes.items(), key=operator.itemgetter(1), reverse=True)
    return (sortedVotes[0][0], neighbors)

预测某数据的类别

# 定义一个测试数据
test_data = [[6.8,5.1,4.9,1.5]]
test = pd.DataFrame(test_data)
# 设置邻居数 = 3
k = 3
# 运行 KNN 模型
result, neigh = knn(data, test, k)
# 预测类别  相邻的k个邻居
print("类别:",result,"相邻的k个邻居:",neigh)

执行结果

5d1418570961751257560200c3cbe016.png

  总结

算法特点:

优点:精度高、对异常值不敏感、无数据输入假定

缺点:计算复杂度高、空间复杂度高

适用数据范围:数值型和标称型

02

决策树

74bcbe3fddb5d5e34c2c87c1f31a428c.png

决策树(Decision Trees)是一种非参监督学习方法,即没有固定的参数,对数据进行分类或回归学习。决策树的目标是从已知数据中学习得到一套规则,能够通过简单的规则判断,对未知数据进行预测。

  代码案例

数据集:train.csv(文末提供)

from sklearn import tree
from sklearn.model_selection import train_test_split
import pandas as pd
titanic = pd.read_csv("data/train.csv")

dd7cae0c742ebf86c898527f4ad199ef.png

前面几列为特征,最后一列为类别

特征处理

## 数据特征处理
titanic["Age"] = titanic["Age"].fillna(titanic["Age"].median())
titanic["Embarked"] = titanic["Embarked"].fillna("S")
candidate_train_predictors = titanic.drop(['PassengerId','Survived','Name','Ticket','Cabin'], axis=1)
categorical_cols = [cname for cname in candidate_train_predictors.columns if
                                candidate_train_predictors[cname].nunique() < 10 and
                                candidate_train_predictors[cname].dtype == "object"]
numeric_cols = [cname for cname in candidate_train_predictors.columns if
                                candidate_train_predictors[cname].dtype in ['int64', 'float64']]
my_cols = categorical_cols + numeric_cols
train_predictors = candidate_train_predictors[my_cols]
dummy_encoded_train_predictors = pd.get_dummies(train_predictors)

数据分割(训练和测试)

# 类别标签
y_target = titanic["Survived"].values
x_features_one = dummy_encoded_train_predictors.values
# 分割数据(75%训练,25%测试)
x_train, x_validation, y_train, y_validation = train_test_split(x_features_one,y_target,test_size=.25,random_state=1)

训练和测试

# 决策树
tree = tree.DecisionTreeClassifier()
# 训练
tree = tree.fit(x_features_one, y_target)
# 测试
accuracy = round(tree.score(x_features_one, y_target), 4)
print("准确度: %0.4f" % (accuracy))

执行结果

332148e27bb5ca8da4787cccef8aacca.png

  总结

算法特点:

优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。

缺点:可能会产生过度匹配问题。

适用数据类型:数值型和标称型

03

朴素贝叶斯

c7d7838a24f97c1cf07d2036edfeb5d9.png

朴素贝叶斯(Naive Bayesian)是基于贝叶斯定理和特征条件独立假设的分类方法,它通过特征计算分类的概率,选取概率大的情况进行分类。

在scikit-learn中,一共有3个朴素贝叶斯的分类算法类。分别是GaussianNB,MultinomialNB和BernoulliNB。其中GaussianNB就是先验为高斯分布的朴素贝叶斯,MultinomialNB就是先验为多项式分布的朴素贝叶斯,而BernoulliNB就是先验为伯努利分布的朴素贝叶斯。

下面以其中一个作为实战案例(GaussianNB)

  代码案例

import numpy as np
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
Y = np.array([1, 1, 1, 2, 2, 2])
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
#拟合数据
clf.fit(X, Y)
print("==[-0.8, -1]预测结果==")
print(clf.predict([[-0.8, -1]]))
print("==[3,2]预测结果==")
print(clf.predict([[3, 2]]))

执行结果

78d5d11575cdb518b79e6f84a37a7f82.png

  总结

算法特点:

优点:在数据较少的情况下依然有效,可以处理多类别问题。

缺点:对于输入数据的准备方式较为敏感。

适用数据类型:标称型数据

04

逻辑回归

b29bedecf7b2bb719a4e21dd08528854.png

逻辑(Logistic) 回归是一种统计方法,用于根据先前的观察结果预测因变量的结果。它是一种回归分析,是解决二分类问题的常用算法

  代码案例

数据集:回归.txt(随意构造,文末会提供)

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from numpy import *
train_x = []
train_y = []
fileIn = open('data/回归.txt')
for line in fileIn.readlines():
    lineArr = line.strip().split()
    train_x.append([1.0, float(lineArr[0]), float(lineArr[1])])
    train_y.append(float(lineArr[2]))
train_x = mat(train_x)
train_y = mat(train_y).transpose()

3f39b196de438d89d69b11f584e7573a.png

前两列是特征,最后一列是类别(label)

分割数据&训练预测

X_train,X_test,y_train,y_test = train_test_split(train_x,train_y,train_size=.7)
print("逻辑回归(sklearn实现):")
logr = LogisticRegression()
logr.fit(X_train,y_train)
print("准确度:",logr.score(X_test,y_test))

执行结果

b40c72275ab45c93ceb914ea911f4b26.png

  总结

算法特点:

优点:计算代价不高,易于理解和实现

缺点:容易欠拟合,分类精度可能不高(这里是使用构造数据,效果较佳,并且运行多次,结果可能不一样)

使用数据类型:数值型和标称型数据

05

支持向量机(SVM)

128015377c4c86e8a2ae01533a478809.png

支持向量机(简称SVM)英文为Support Vector Machine。它是一 种监督式学习的方法,它广泛的应用于统计分类以及回归分析中。支持向量机(Support Vector Machine)是一种十分常见的分类器,核心思路是通过构造分割面将数据进行分离。

  代码案例

数据集:iris.csv

from sklearn import svm
import pandas as pd
from sklearn.model_selection import train_test_split
# 导入数据
data = pd.read_csv("data/iris.csv")

分割数据&训练预测

x =  data.iloc[:, 0:4]  # 按位置取某几列
y = data["Name"].values
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1, train_size=0.6)

clf = svm.SVC(C=0.8, kernel='rbf', gamma=20, decision_function_shape='ovr')
clf.fit(x_train, y_train.ravel())
print("训练集精度:",clf.score(x_train, y_train))
print("测试集精度:",clf.score(x_test, y_test))

执行结果

4fd4e8081a85e03e70fe0260ca986e9c.png

  总结

算法特点:

优点:计算代价不高,易于理解和实现

缺点:容易欠拟合,分类精度可能不高

使用数据类型:数值型和标称型数据

06

随机森林

4af1ee87becaa6bdb692f336350388f2.png

随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。随机森林解决决策树泛化能力弱的特点

  代码案例

数据集:iris(sklearn自带)

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import load_iris
iris = load_iris()
# 4个特征属性是:萼片宽度 萼片长度 花瓣宽度 花瓣长度 
# 标签是花的种类:setosa versicolour virginica
rf = RandomForestRegressor()  # 这里使用了默认的参数设置
rf.fit(iris.data[:150], iris.target[:150])  # 进行模型的训练
# 预测样本
instance = iris.data[[50]]
print('预测类别:', rf.predict(instance),"真实类别:",iris.target[50])
instance = iris.data[[148]]
print('预测类别:', rf.predict(instance),"真实类别:",iris.target[148])

执行结果

521edf00905f9ae3590815e07c152fe3.png

  总结

算法特点:

优点:几乎无需输入准备、可实现隐式特征选择、训练速度非常快、其他模型很难超越。

缺点:劣势在于模型大小、是个很难去解释的黑盒子。

使用数据类型:数值型和标称型数据

fc7badad41bb0d4dce4b282c7efee912.png

最后

本文的完整源码和涉及的数据集都已整理完毕

527f48b01333c2998d51926e7df91bc8.png

需要的小伙伴,右下角点个【在看】

扫描下方二维码,添加机器侠个人微信领取

c19b81c9c836e4412c62aae312a58035.png

方便的话,帮忙点赞、转发,让更多的小伙伴学习

8eb4417e9b1b9e341367974f2bf7cefa.png

分享‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

2eee3e35ec9aa33bdf5fe83b7b0e0095.png

收藏

88a6666bd3ea0360a8ac92c3fcf9a0d5.png

点赞

eddb2ffc0c1922691ab7c4694ab891d7.png

在看

  • 151
    点赞
  • 909
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip 【优质项目推荐】 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程,如有问题或建议,请及时私信沟通,帮助解答。 2.项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、项目初期立项演示等用途。 4.如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能。 机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip 机器学习大作业-基于各种机器学习分类算法实现乳腺癌预测比较python源码+数据集.zip
以下是三种常见机器学习算法Python源码示例: 决策树算法Python源码示例: ``` # 导入库 from sklearn import tree # 假设你有训练数据集的预测器X和目标变量Y,以及测试数据集的预测器x_test # 创建决策树对象 model = tree.DecisionTreeClassifier(criterion='gini') # 对于分类问题,默认使用基尼系数,也可以选择信息增益 # 训练模型并检查得分 model.fit(X, Y) model.score(X, Y) # 预测输出 predicted = model.predict(x_test) ``` 梯度提升算法Python源码示例: ``` # 导入库 from sklearn.ensemble import GradientBoostingClassifier # 假设你有训练数据集的预测器X和目标变量Y,以及测试数据集的预测器x_test # 创建梯度提升分类器对象 model = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0) # 训练模型并检查得分 model.fit(X, Y) # 预测输出 predicted = model.predict(x_test) ``` 朴素贝叶斯算法Python源码示例: ``` # 导入库 from sklearn.naive_bayes import GaussianNB # 假设你有训练数据集的预测器X和目标变量Y,以及测试数据集的预测器x_test # 创建高斯朴素贝叶斯分类器对象 model = GaussianNB() # 训练模型并检查得分 model.fit(X, Y) # 预测输出 predicted = model.predict(x_test) ``` 这些是三种常见机器学习算法Python源码示例,你可以根据你的需求和数据选择合适的算法进行模型训练和预测。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【机器学习算法】10种常见机器学习算法+Python代码](https://blog.csdn.net/nnn0245/article/details/128222067)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值