前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >收手吧,华强!我用机器学习帮你挑西瓜

收手吧,华强!我用机器学习帮你挑西瓜

作者头像
Ai学习的老章
发布于 2021-12-15 11:04:35
发布于 2021-12-15 11:04:35
54800
代码可运行
举报
运行总次数:0
代码可运行

机器学习领域,有一个很有名气的西瓜--周志华老师的《机器学习》,很多同学选择这本书入门,都曾有被西瓜支配的恐惧。我写文章的时候也特别喜欢用西瓜数据集,以它为例手算+可视化讲解过XGBoost,自认非常通俗易懂。

最近我介绍了决策树的可视化,还有可以快速实现机器学习web应用的神器——streamlit。今天我们就把它们结合起来,用机器学习帮华强挑西瓜!仅供娱乐,希望大家可以学到一些新姿势。

项目已发布,欢迎大家试玩 https://share.streamlit.io/tjxj/watermelon-prediction/main/app.py

老规矩,先看效果图(GIF刷新有点慢,请耐心等待)

使用方法

第一步,左侧先选择西瓜外观

第二步,选择决策树的模型参数

第三步,看结果

如果是好瓜,页面弹出的就是笑眯眯的图片~

如果是坏瓜,页面显示的是后果很严重的图片

实现方式

注:篇幅原因,仅贴出核心代码

完整代码我放到了网页里,需要可以copy走

data.py

主要是原始数据的处理,inputData方法实现输入外观变量值的标签编码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def inputData():
    st.sidebar.subheader("请选择西瓜外观:sunglasses:")
    color = st.sidebar.selectbox("色泽", ("青绿", "乌黑", "浅白"))
    root = st.sidebar.selectbox("根蒂", ("蜷缩", "稍蜷", "硬挺"))
    knocks = st.sidebar.selectbox("敲击", ("浊响", "沉闷", "清脆"))
    texture = st.sidebar.selectbox("纹理", ("清晰", "稍糊", "模糊"))
    navel = st.sidebar.selectbox("脐部", ("凹陷", "稍凹", "平坦"))
    touch = st.sidebar.selectbox("触感", ("硬滑", "软粘"))
    input = [[color, root, knocks, texture, navel, touch]]
    features = ["color", "root", "knocks", "texture", "navel", "touch"]
    np.array(input).reshape(1, 6)
    df_input = pd.DataFrame(input, columns=features, index=None)

    for feature in features[0:6]:
        le = joblib.load("./models/" + feature + "_LabelEncoder.model")
        df_input[feature] = le.transform(df_input[feature])

    return df_input

训练模型

这一块很简单,就不多解释了。注:数据量太小就不整交叉验证了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def dt_param_selector():
    st.sidebar.subheader("请选择模型参数:sunglasses:")
    criterion = st.sidebar.selectbox("criterion", ["gini", "entropy"])
    max_depth = st.sidebar.number_input("max_depth", 1, 50, 5, 1)
    min_samples_split = st.sidebar.number_input(
        "min_samples_split", 1, 20, 2, 1)
    max_features = st.sidebar.selectbox(
        "max_features", [None, "auto", "sqrt", "log2"])

    params = {
        "criterion": criterion,
        "max_depth": max_depth,
        "min_samples_split": min_samples_split,
        "max_features": max_features,
    }

    model = DecisionTreeClassifier(**params)
    df = dataPreprocessing()
    X, y = df[df.columns[:-1]], df["label"]
    model.fit(X, y)
    return modeldef predictor():
    df_input = inputData()
    model = dt_param_selector()
    y_pred = model.predict(df_input)
    if y_pred == 1:
        goodwatermelon = Image.open("./pics/good.png")
        st.image(goodwatermelon,width=705,use_column_width= True)
        st.markdown("<center>🍉🍉🍉这瓜甚甜,买一个🍉🍉🍉</center>", unsafe_allow_html=True)
    else:
        file_ = open("./pics/bad2.gif", "rb")
        contents = file_.read()
        data_url = base64.b64encode(contents).decode("utf-8")
        file_.close()

        st.markdown(
            f'<img src="data:image/gif;base64,{data_url}" width="100%">',
            unsafe_allow_html=True,
        )
        st.markdown('<center>🔪🔪🔪这瓜不甜,买不得🔪🔪🔪</center>', unsafe_allow_html=True)
    return y_pred,model

决策树可视化

决策树可视化和插入网页我用decisionTreeVizsvg_write实现,可惜目前仅本地模式正常,发布后报错,尚未解决。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def decisionTreeViz():
    df,le = getDataSet()
    X, y = df[df.columns[:-1]], df["label"]
    clf = joblib.load('..\watermelonClassifier.pkl')
    viz = dtreeviz(clf, 
                X, 
                y,
                orientation="LR",
                target_name='label',
                feature_names=df.columns[:-1],
                class_names=["good","bad"]
                )  
                
    return viz

def svg_write(svg, center=True):
    """
    Disable center to left-margin align like other objects.
    """
    # Encode as base 64
    b64 = base64.b64encode(svg.encode("utf-8")).decode("utf-8")

    # Add some CSS on top
    css_justify = "center" if center else "left"
    css = f'<p style="text-align:center; display: flex; justify-content: {css_justify};">'
    html = f'{css}<img src="data:image/svg+xml;base64,{b64}"/>'

    # Write the HTML
    st.write(html, unsafe_allow_html=True)

streamlit

过程就不说了,就把调用的streamlit API列一下吧

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
st.title
st.write
st.code
st.table
st.markdown
st.sidebar
st.expander
st.code
st.image
st.pyplot

以上API具体用途大家可以查一查https://docs.streamlit.io/library/api-reference

TODO

  • 增加更多模型
  • dtreeviz决策树可视化bug 决策树可视化依赖graphviz,在localhost:8501下预览可以显示,发布到streamlit.io就不行了。
  • GIF 不适配手机屏幕
  • 移动端预测坏瓜页面刷新bug

以上问题,如有兴趣,欢迎贡献代码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与统计学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
干货分享 | 用Streamlit来制作数据可视化面板实战
在上回初步介绍了“steamlit”框架的基本用法之后(干货分享 | 用 Streamlit 来制作数据可视化面板教程(一)),这回我们动手来实践一下,用“streamlit”框架来制作一个可视化仪表盘,用到的数据是印度在新冠病毒的影响之下病例数据,包括了印度每个州的“死亡数据”、“治愈数据”、“确诊数据”以及“活跃病例”,感兴趣的童鞋也可以一起动手来实现一下。
用户6888863
2021/07/19
2.6K1
用Streamlit构建机器学习应用
Streamlit是一个开放源码的Python库,它可以轻松地为机器学习建模漂亮的应用程序。你可以很容易地通过pip在你的终端上安装它,然后开始用Python编写你的网络应用程序。
AiTechYun
2019/11/11
1.3K0
用Streamlit构建机器学习应用
机器学习 | 决策树模型(二)实例
上面文章《决策树模型(一)理论》中,已详细介绍了决策树原理,包括决策树生长原理,决策树的特征选择原理,决策树剪枝策略以及决策树处理缺失值原理等等。如果您还没有阅读,可点击跳转,或关注公众号<数据STUDIO>获取文章详情。
数据STUDIO
2021/06/24
1.1K0
30行代码用streamlit构建你的机器学习模型应用
Streamlit是一个快速构建数据分析和机器学习Web页面的开源Python库。
lyhue1991
2023/02/23
1.6K0
30行代码用streamlit构建你的机器学习模型应用
机器学习入门 12-7 决策树的局限性
通过前几个小节绘制使用决策树来解决分类问题的决策边界可以看出,决策树的决策边界都是横平竖直的直线。
触摸壹缕阳光
2021/02/26
1.4K0
机器学习入门 12-7 决策树的局限性
决策树模型参数释义「建议收藏」
转自https://blog.csdn.net/qq_16000815/article/details/80954039
全栈程序员站长
2022/11/10
5900
数据分析入门系列教程-决策树实战
在学习了上一节决策树的原理之后,你有没有想动手实践下的冲动呢,今天我们就来用决策树进行项目实战。
周萝卜
2020/10/30
9340
数据分析入门系列教程-决策树实战
scikit-learn 梯度提升树(GBDT)调参小结
    在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点。
刘建平Pinard
2018/08/14
4K0
快速入门Python机器学习(21)
10.1.3 随机森林回归法 类参数、属性和方法 类 class sklearn.ensemble.RandomForestRegressor(n_estimators=100, *, criterion='mse', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_dec
顾翔
2022/09/23
2860
快速入门Python机器学习(21)
机器学习6:集成学习--boosting(AdaBoost)与GBDT
GBDT相关知识模块:前向分布算法,负梯度拟合,损失函数,回归,二分类,多分类,正则化。
用户5473628
2019/08/08
2.3K0
机器学习6:集成学习--boosting(AdaBoost)与GBDT
快速入门Python机器学习(18)
信息熵(约翰·香农 1948《通信的数学原理》,一个问题不确定性越大,需要获取的信息就越多,信息熵就越大;一个问题不确定性越小,需要获取的信息就越少,信息熵就越小)
顾翔
2022/09/23
3490
快速入门Python机器学习(18)
机器学习基础:可视化方式理解决策树剪枝
看了一些市面上的经典教材,感觉决策树剪枝这一部分讲的都特别晦涩,很不好理解。本文以理论白话+具体案例的形式来讲清楚这个重要知识点,打好决策树这个基础,有助于理解之后我们要讲解的随机森林、gbdt、xgboost、lightgbm等模型。
Ai学习的老章
2020/09/08
7570
如何快速构建一个核酸点服务状态查询Web应用?Python实例详解
设计模式实软件中常见问题的典型解决方案。能根据需求进行预制蓝图,可用于解决代码中反复出现的设计问题。高质量应用程序框架设计过程广泛使用设计模式来确保代码可复用和可扩展性。
用户8949263
2022/04/08
1.3K0
如何快速构建一个核酸点服务状态查询Web应用?Python实例详解
【机器学习】决策树代码练习
1.分类决策树模型是表示基于特征对实例进行分类的树形结构。决策树可以转换成一个if-then规则的集合,也可以看作是定义在特征空间划分上的类的条件概率分布。
算法进阶
2022/06/02
4100
【机器学习】决策树代码练习
基于sklearn的集成分类器理论代码实现
理论 集成模型 集成分类器模型是综合考虑多种机器学习模型的训练结果,做出分类决策的分类器模型 投票式:平行训练多种机器学习模型,每个模型的输出进行投票做出分类决策 顺序式:按顺序搭建多个模型,模型之间存在依赖关系,最终整合模型 随机森林分类器 随机森林分类器是投票式的集成模型,核心思想是训练数个并行的决策树,对所有决策树的输出做投票处理,为了防止所有决策树生长成相同的样子,决策树的特征选取由最大熵增变为随机选取 梯度上升决策树 梯度上升决策树不常用于分类问题(可查找到的资料几乎全在讲回归树),其基本思想是每
月见樽
2018/04/27
1.1K0
Python基础(十三) | 机器学习sklearn库详解与应用
可见,花瓣的长度和宽度有非常好的相关性。而花萼的长宽效果不好,因此考虑对他们丢弃。
timerring
2022/10/27
7190
Python中调用sklearn决策树
最近刚好有项目要用决策树实现,所以把整理的Python调用sklearn实现决策树代码分享给大家。
阿黎逸阳
2021/04/29
3.2K0
Python中调用sklearn决策树
决战紫禁之巅 | sklearn参数介绍及使用
本篇将介绍决策树sklearn的使用,超参数的定义和用法,以一个简单的实战内容实现决策树的分类和回归实现。
Python数据科学
2019/07/19
1.7K0
机器学习之鸢尾花-决策树
Decision Trees (DTs) 是一种用来 classification 和 regression 的无参监督学习方法。其目的是创建一种模型从数据特征中学习简单的决策规则来预测一个目标变量的值。
python与大数据分析
2022/03/11
5080
机器学习之鸢尾花-决策树
关于如何使用以下技术微调机器和深度学习模型的简介:随机搜索,自动超参数调整和人工神经网络调整
模型参数定义了如何使用输入数据来获得所需的输出,并在训练时进行学习。相反,超参数首先确定了模型的结构。
代码医生工作室
2019/09/29
2.3K0
关于如何使用以下技术微调机器和深度学习模型的简介:随机搜索,自动超参数调整和人工神经网络调整
推荐阅读
相关推荐
干货分享 | 用Streamlit来制作数据可视化面板实战
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验