当前位置: 首页 > article >正文

python+Mosh网课笔记13 使用Python进行机器学习

 太久没写python代码了,学机器学习重新拾起python,笔记比较简陋。

参考:mosh python网课

目录

一、通常的步骤

二、库和工具

三、环境

四、导入数据集

五、准备数据

六、预测-利用决策树

七、衡量模型的准确性

八、模型持久性

1. 保存模型

2. 加载模型

九、可视化决策树


一、通常的步骤

  1. 导入数据。数据通常以CSV格式存储。
  2. 清洗数据。比如删除重复数据或者不完整的数据。
  3. 把数据拆分成训练集、测试集等。
  4. 创建一个模型。
  5. 训练模型。
  6. 做出预测。
  7. 评估预测效果,对模型进行提升。

二、库和工具

  • Numpy 对处理多维数组很方便
  • Pandas 为数据分析提供了data frame
  • MatPlotLib
  • Scikit-Learn

三、环境

下载配置anaconda环境,这个在csdn上搜其他高赞帖子教程就行。

四、导入数据集

  1. 注册Kaggle账号,我用Google账号注册登录的。搜索Video Game Sales,找到Datasets,选择第一个,投票最多的那个。 下载是一个压缩包,解压,vgsales.csv文件放到代码工程文件夹下。
  2. 我是用的vscode新建.ipynb文件运行,不是直接用的jupyter(因为我之前用过,总是出问题)。vscode需要安装jupyter插件,运行时,遇到了问题 Running cells with '(Python 3.8.20)' requires the ipykernel package.
  3. 已解决,运行该命令即可:pip install ipykernel --upgrade   参考在vscode中运行jupyter时报错_running cells with 'python 3.8.13 ('pythonproject6-CSDN博客
  4. .ipynb文件下运行,数据集加载出来。
  5. import pandas as pd
    df = pd.read_csv('vgsales.csv') #读取csv文件中的数据。
    df 
    #df.shape 返回数据集的规模  (x,y) x是记录数,y是column数。
    #df.describe() 返回generates descriptive statistics 比如count,mean,min,max,
    #df.values() 以二维数组的形式返回表中的数据。
    

五、准备数据

  1. 利用music.csv删除genre列做预测。(这个文件直接搜mosh music.csv就行,github上有,我是在Google浏览器直接搜的。)
  2. 输入集:把genre列删了,只留age和gender列,预测genre列。
  3. 输出集:把genre列存储到y中,作为结果。X和y都准备出来,开始训练模型从X预测y。

六、预测-利用决策树

  1. 导入决策树的包:from sklearn.tree import DecisionTreeClassifier  。先下载这个sklearn包。pip install sklearn时出错了。提示我用pip install scikit-learn,需要挂v。

  2. import pandas as pd
    from sklearn.tree import DecisionTreeClassifier
    #决策树。scikit-learn库,这个机器学习库很受欢迎。
    
    music_data = pd.read_csv('music.csv')
    X = music_data.drop(columns=['genre']) 
    #不会修改原始数据集,会创建新数据集。
    y =  music_data['genre']
    
    model=DecisionTreeClassifier()
    model.fit(X,y)
    predictions = model.predict([ [21,1] ,[22,0]])
    predictions

 要求预测21岁的男生和22岁的女生喜欢的音乐数据,预测结果:

我们再回顾一下music_data,可见预测的数据准确。

直接建立预测准确的模型并不容易,我们可以通过微调模型或者使用其他模型的方式来提升预测准确性。

七、衡量模型的准确性

  • 70%-80%的数据用于训练,另外20%-30%的数据用于测试。
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
#功能:将数据集分为两组。
from sklearn.metrics import accuracy_score
#计算准确度。

music_data = pd.read_csv('music.csv')
X = music_data.drop(columns=['genre']) 
#不会修改原始数据集,会创建新数据集。
y =  music_data['genre']
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2) #20%的数据用于测试。
#输入集,输出集。

model=DecisionTreeClassifier()
model.fit(X_train,y_train)
predictions = model.predict(X_test)

score = accuracy_score(y_test,predictions) # 精度在[0,1]之间。
score

  • 修改test_size的大小,比如test_size=0.8。发现当训练集很小的时候,训练的准确度也很低。当我们给模型更多并且更干净的数据时,我们能得到更准确的结果。
  • 一些模型需要数千甚至数百万个样本来训练模型。我们这个music.csv中的数据只有17条,太少了。所以不断尝试重新运行时,发现准确度不是1了。

八、模型持久性

1. 保存模型

  • 导入包:from sklearn.externals import joblib #可以保存已加载模型。 报错:cannot import name 'joblib' from 'sklearn.externals'  解决:pip install joblib, 导入包:import joblib
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
import joblib #可以保存已加载模型。

music_data = pd.read_csv('music.csv')
X = music_data.drop(columns=['genre']) 
y =  music_data['genre']

model=DecisionTreeClassifier()
model.fit(X,y)

joblib.dump(model, 'music-recommender.joblib') #存储此模型的文件名称。

#predictions = model.predict(X)

最后生成了music-recommender.joblib文件。


2. 加载模型

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
import joblib #可以保存已加载模型。

model = joblib.load('music-recommender.joblib') #存储此模型的文件名称。

predictions = model.predict([[21,1]])
predictions

九、可视化决策树

生成music-recommender.dot文件,然后安装graphviz插件和软件,可视化。

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree

music_data = pd.read_csv('music.csv')
X = music_data.drop(columns=['genre']) 
y =  music_data['genre']

model=DecisionTreeClassifier()
model.fit(X,y)

tree.export_graphviz(model,out_file='music-recommender.dot',
                     feature_names=['age','gender'], 
                     class_names=sorted(y.unique()), #重置class为genre去重后的结果。
                     label='all', #每个框都有label,以便我们阅读。
                     rounded=True, #每个框有圆角。
                     filled=True) #每个框都能填充颜色。
  • 安装Graphviz Preview和Graphviz (dot) language插件(我不知道是哪个起作用,都安装了),安装插件后,仍然没用。我下载了Graphviz官网的exe文件,并且选择了自动添加环境变量中。参考:【VS Code】Windows10下VS Code配置Graphviz和DOT语言环境_怎么给codeblocks配置graphviz-CSDN博客


http://www.kler.cn/news/366284.html

相关文章:

  • 等保测评:安全计算环境的详细讲解
  • Redis 发布订阅 总结
  • 2024年10月24日第一部分AOP编程和自信
  • 【css-在一个元素中设置font-size和实际渲染字体大小不一致】
  • python multiprocessing lock锁在相同父进程ID起作用
  • Lua 语言中的注释详解
  • 对Kotlin在Android开发中的应用看法
  • Django模板的使用
  • w~自动驾驶合集7
  • Photoshop中的混合模式公式详解
  • GitLab+Jenkins 实现 Webhook 自动化触发构建
  • 聚观早报 | 谷歌重组AI部门;荣耀Magic 7标准版外观细节
  • # 渗透测试#安全见闻9 二进制安全
  • es中自定义ik的分词词库(词库布置在nginx)
  • 浪潮云启操作系统(InLinux)bcache缓存实践:理解OpenStack环境下虚拟机卷、Ceph OSD、bcache设备之间的映射关系
  • 莱维飞行(Levy Flight)机制的介绍和MATLAB例程
  • QStyledItemDelegate用法(PyQt)
  • C++中的list介绍(常用函数)
  • Flume面试整理-如何处理Flume中的数据丢失
  • 2769. 找出最大的可达成数字
  • Linux操作命令(一)
  • GaussDB逻辑解码技术原理
  • OceanBase 首席科学家阳振坤:大模型时代的数据库思考
  • fpga开发环境总结
  • Spring声明式事务管理是通过注解或 XML 配置来实现
  • 安全见闻(9-完结)