streamlit

streamlit – The fastest way to build and share data apps 是专门针对机器学习和数据科学团队的应用开发框架,你可以认为它的目标是取代Flask在机器学习项目中的地位从而帮助机器学习工程师快速开发用户交互工具。

源码传送门: https://github.com/streamlit/streamlit

关于streamlit的介绍和教程网上可以搜到,不再做过多的冗余介绍,当然本篇依旧是入门篇,不过我们会用实际的数据来看一下它基本的效果。我们要用DogeCoin狗狗币的历史数据来画一些有意思的图,并利用streamlit来展示出来,整个过程也是对streamlit的初步认识。废话不多说,开始撸代码。

1、安装

pip install streamlit

2、狗狗币数据一览

DogeCoin数据一览、

3、引入相关python包

import streamlit as st
import pandas as pd
import plotly.graph_objects as go

4、自定义函数

# 加载数据
def load_dogecoin_data():
    ss = pd.read_csv("D:/path/to/dogecoin/doge_history.csv")
    ss = ss.set_index(pd.DatetimeIndex(ss['tickertime']))
    ss = ss.drop(columns=['Unnamed: 0', 'tickertime'])
    ss = ss.sort_index()
    return ss

# 设置开始结束日期
def get_inputs():
    # 设置边框输入栏
    start_date = st.sidebar.text_input("开始日期:", "2019-12-01")
    end_date = st.sidebar.text_input("结束日期:", "2021-05-16")
    return start_date, end_date

# 按日期加载数据
def get_data(start, end):
    data = load_dogecoin_data()
    start = pd.to_datetime(start)
    end = pd.to_datetime(end)
    return data.loc[start: end]

5、数据初始化

_start, _end = get_inputs()
df = get_data(_start, _end)

6、各种画图

fig = go.Figure(data=[go.Candlestick(
    x=df.index,
    open=df['openprice'],
    close=df['closeprice'],
    high=df['high'],
    low=df['low'],
    increasing_line_color='red',
    decreasing_line_color='green'
)])

st.title('Analysis DogeCoin by Streamlit!')
st.header('DogeCoin data')
st.write(df)
st.header('DogeCoin Statistics')
st.write(df.describe())
st.header('DogeCoin Volume')
st.bar_chart(df['vol'])
st.header('DogeCoin Close Price')
st.line_chart(df['closeprice'])
st.header('DogeCoin Candle Stick')
st.plotly_chart(fig)

7、运行

streamlit run streamlit_app.py

8、效果展示

我们可以在浏览器中看到运行的效果,打开浏览器输入地址,http://localhost:8501/

streamlit sidebar效果

在浏览器的左侧边框可以看到初始化的文本框,我们可以自己手动输入日期,然后按回车,那么浏览器对应的其它图会自动从新加载指定日期的数据。

streamlit 基本效果图标1
streamlit 基本效果图2

整个浏览器中看到的图都是动态的,可以通过鼠标滚动或者单击挪动图的具体内容。

首页 » 机器学习

参考: https://zhuanlan.zhihu.com/p/85741306

机器学习-拉普拉斯平滑(Laplacian smoothing)

零概率和拉普拉斯修正

拉普拉斯平滑(Laplacian smoothing) 是为了解决零概率的问题。拉普拉斯是一个人名,他是法国数学家,并且最早提出用 加1 的方法来估计没有出现过的现象的概率。

零概率问题:在计算事件的概率时,如果某个事件在观察样本库(训练集)中没有出现过,会导致该事件的概率结果是0。这是不合理的,不能因为一个事件没有观察到,就被认为该事件一定不可能发生(即该事件的概率为0)。至于可能出现零概率问题的情况在贝叶斯定理实现是容易出现。

理论假设:假定训练样本很大时,每个分量x的计数加1造成的估计概率变化可以忽略不计,但可以方便有效的避免零概率问题。

举一个例子🌰来说明一下,如下图,有很多的“0”值,如何把零值影响规避掉呢?

零概率问题

previous : P(wi | wi-1) = c(wi-1, wi) / c(wi)
using smoothing: P(wi | wi-1) = ( c(wi-1, wi) + 1 ) / (c(wi-1) + V)
Then we can ensure that the p will not be zero. Now we can estimate this mothed.
We can use the Reconsitituted formula: c(wi-1, wi) = P(wi | wi-1) * c(wi-1) = ( c(wi-1, wi) + 1 ) / (c(wi-1) + V) * c(wi-1).

总结:分子加一,分母加V,V代表类别数目。
拉普拉斯修正后的数据

再进一步总结就如下:

总结拉普拉斯

场景举栗子:

假设在文本分类中,有3个类:C1、C2、C3。
在指定的训练样本中,某个词语K1,在各个类中观测计数分别为0,990,10。
则对应K1的概率为0,0.99,0.01。

显然C1类中概率为0,不符合实际。

于是对这三个量使用拉普拉斯平滑的计算方法如下:
  1/1003 = 0.001,991/1003=0.988,11/1003=0.011
  
在实际的使用中也经常使用加 λ(0≤λ≤1)来代替简单加1。如果对N个计数都加上λ,这时分母也要记得加上N*λ

首页 » 机器学习

概率统计-贝叶斯分析(Bayesian analysis)

贝叶斯统计

概率是我们个人的一个主观概念, 表明我们对某个事物发生的相信程度。 如同 Pierre Lapalace 说的: Probability theory is nothing but common sense reduced to calculation.   这正是贝叶斯流派的核心,换句话说,它解决的是来自外部的信息与我们大脑内信念的交互关系。

概率这件事大家都觉得自己很熟悉, 叫你说概率的定义 , 你却不一定说的出,我们中学课本里说概率这个东西表述是一件事发生的频率, 或者说这叫做客观概率。

Bayesian analysis

贝叶斯分析

贝叶斯分析的思路对于由证据的积累来推测一个事物发生的概率具有重大作用, 它告诉我们当我们要预测一个事物, 我们需要的是首先根据已有的经验和知识推断一个先验概率, 然后在新证据不断积累的情况下调整这个概率。整个通过积累证据来得到一个事件发生概率的过程我们称为贝叶斯分析 。
图像法, 这里的 A 的面积即先验, 后验是阴影占蓝圈的百分比。

图上红圈和篮圈的面积, 很少我们在开始就知道, 这才是应用中的难点。

贝叶斯分析可以瞬间理解一些常用的理论, 如幸存者偏差 ,你发现一些没读过书的人很有钱,事实上是你发现就已经是幸存者了(对应上图中小红圈), 而死了的人(红圈外的大部分面积)你都没见到啊。还有阴谋论 , 阴谋论的特点是条件很多很复杂, 但是条件一旦成立,结论几乎成立,  你一旦考虑了先验,这些条件成立本身即很困难, 阴谋论不攻自克。

贝叶斯分析的框架也在教我们如何处理特例与一般常识的规律。如果你太注重特例(即完全不看先验概率) 很有可能会误把噪声看做信号, 而奋不顾身的跳下去。 而如果恪守先验概率, 就成为无视变化而墨守成规的人。其实只有贝叶斯流的人生存率会更高, 因为他们会重视特例, 但也不忘记书本的经验,根据贝叶斯公式小心调整信心,甚至会主动设计实验根据信号判断假设,这就是我们下一步要讲的。

贝叶斯决策

叶斯决策主要包含四个部分: 数据(D)、假设(W)、目标(O)、决策(S) 。

假设是我们要验证的事实, 目标是我们最终要取得优化的量, 决策时根据目标得到的最后行为。  与上一步贝叶斯分析增加的部分是目标和决策。假设在问题里如果是连续的往往以参数空间的形式表达。

然后我们可以按照如下步骤做:

第一, 理清因果链条,哪个是假设,哪个是证据

第二,给出所有可能假设,即假设空间

第三,给出先验概率

第四,根据贝叶斯概率公式求解后验概率,得到假设空间的后验概率分布

第五,利用后验概率求解条件期望,得到条件期望最大值对应的行为.

贝叶斯决策如果一旦变成自动化的计算机算法,它就是机器学习。