喵窝

Nice to see u

0%

背景

利用机器学习如何更加精准的分析产品数据,以推动产品的成长.其中,原数据为:

  1. 用户在产品中产生的一些行为数据
  2. 直接反应到产品标准的一些数据, 如留存数据,用户活跃,用户新增,在线时长

预计可以使用两种不同的思路来得出一些数据:

  1. 通过用户行为数据预测留存影响
  2. 通过对行为数据与用户流失数据的分析,对不同的行为数据进行流失点进行分类

逻辑回归

  1. 本类问题可以抽象为多特征向量的逻辑回归问题

前期工作

  1. 确定数据矩阵内容: 即特征与结果值
    1. 特征: 当天新增用户的行为数据
    2. 结果值: 0/1区分留存数据
  2. 数据预处理
    1. 特征筛选: 利用python的特征选择工具确定采用特征
    2. 特征归一化/标准化
  3. 确定语言与工具
    1. python
    2. scikit-learn

介绍

  1. 它的结构相对比较简单,是一个只有可视层和隐藏层两层结构的网络
  2. 从严格意义上说,RBM并不属于深层神经网络,它只是一个两层结构,并不“深”,但它同时也是构成其他深度神经网络的常用层次组件
  3. RBM是由可视层和隐藏层相互连接的一个完全二分图网络结构,每一个神经元是一个二值单元,也就是每一个神经元的取值只能等于0或1
  4. RBM的网络结构具有这样的特点:可视层的每一个神经元与隐藏层的每一个神经元相互连接;可视层神经元之间,隐藏层神经元之间没有连线
    Read more »

推荐系统分类(根据不同输入)

  1. 比较熟悉的、经常使用的协同过滤的技术,它使用的一方面是用户的信息,另一方面是和用户有相似行为的群体的信息,协同过滤技术就是根据这一群体的信息给用户做推荐。
  2. 基于内容的推荐,它用到的一方面是用户的信息,另一方面是商品的显性相关属性信息,基于内容的推荐就是向用户推荐他可能浏览或者购买过的相似产品的信息。
  3. 混合技术,会运用不同的输入和技术共同进行推荐。
Read more »

什么情况下需要重构

  1. 结构错乱
    • 代码无法分出层次,无法分清业务线.
    • 各个业务模块间/层次间的代码互相夹杂.
    • 由于多人协作导致的多种架构(MVP/MVVM/MVC等)并存.
    • 规范性问题,导致各个模块内的代码形式互相不一致, 风格迥异.
  2. 可读性差
    • 超长函数,超大类
    • 代码的格式不规范或不一致.
    • 冗余代码,无用代码,重复代码.
    • 过于高明, 使用一些不常用的小技巧而且没有相关注释.
    • 滥用继承, 接口实现等, 导致难以跟踪.
  3. 不能很好的适应产品的发展
    • 维护困难, 牵一发动全身.
    • 不具备扩展灵活性, 无法很快引入系统版本更新时新特性.
    • 不具备可变更性, 产品添加新功能或修改需求时需要修改大量的代码.

重构的目标

重构的目的就是要提高代码质量, 而高质量的代码指标个人认为有如下几点, 当然其实也是老生常谈的几点.
排名分先后:

  1. 可读性
    • 规范一致性.
    • 结构, 层次明了.
    • 命名有含义, 注释要清晰.
    • 逻辑简短, 没有长篇大幅的代码块.
    • 方法提取, 类继承关系合理.
    • 不滥用设计模式.

聪明是可读性的敌人.

  1. 可维护性

    • 杜绝魔鬼数字/字符串/尺寸值/颜色值等
    • 代码复用,以便维护.
    • 不写死,预测可能的变化(但不要提前设计).
  2. 可扩展性

    • 良好的分层结构, MVx模式运用.
    • 通过一些设计模式的使用来提高可扩展性.
    • 开闭原则: 修改关闭, 扩展开放.

如何重构

首先让我们重温下”重构”的含义:

<<重构 — 改善既有代码的设计>> 这本大神作品强烈建议大家翻阅下~ 里面对重构的定义, 以及如何从一个个小的Bad Smell开始重构等都有详细的描述.

那么作为一个进行已久的Android工程, 我们应该如何重构呢?
其实这是一个对症下药的问题, 针对为什么要重构提出的几个代码问题, 重构也可以分成以下几步:

  1. 架构选择, 结构调整

    • 根据App的业务场景(展示型, 交互型, 后台工具型…)选择合适的架构.

      • 并不是说一定要选用一个架构, 比如说后台工具型的App, 可能界面不多, 也服务器的交互也少, 基本是由Service组成, 可能直接用Android原生的结构就可以.
      • 界面较多, 且与服务器交互较多的建议选用MVP架构. 可以通过P来做数据处理, 将数据源M与展示层V解耦, 便于替换数据源或是改变UI.
        根据选用的架构以及业务模块分包
  2. 技术/开源库选定

    • ListView/RecyclerView的选择, Fragment/Activity的选择等.
    • 根据业务特点和选择的架构, 选用相关技术/开源库支持或对当前使用的进行整理.
    • 例如HTTP请求库, 缓存库, 图片加载库等等.
  3. 确定规范
    • 制定编码规范, 可以根据Google推荐的Java编码规范, 适当定制.例如我的项目中的基本规范.
    • 制定代码提交规范, git flow管理流程规范等.
  4. 自底而上, 由小至大
    • 从底部开始, 也就是常说的Model层,数据层开始, 因为这部分相对独立, 可以通过提供接口与UI层隔离.
    • 不要一下就大面积重构, 需要逐个小的case进行重构验证, 保证当前运行.
  5. 持续重构, 伴随测试
    • 持续进行小的重构, 每次重构需要伴随测试, 保证重构结果.
    • 提取方法, 去除重复代码.
    • 结构调整.
    • 融入面向对象/接口编程思想, 注意SOLID原则.
    • 多用组合, 少用继承
      ……
      最好有单元测试支持.
  6. 重构而非重写
    • 不到万不得已不要想重写.
    • 重写会产生各种意想不到的问题, 诸如设计过度, 对于当前代码把握不够(例如现在看起来很不友好的代码可能就是为了解决一个架构无法解决的问题等).

背景

公司视频应用,需要针对用户的操作数据分析,得出应用内所有的视频的权重分析,方便以后更好的进行推荐视频操作.目前已有的log格式主要有:

1
2
3
action             vid           uid
view video video_001 NaN
play video video_001 user_00x

用户分为注册用户与游客两种,操作主要有view,like,comment,upload,download几种.为了方便处理,第一阶段只考虑针对游客访问的视频进行处理.这样形成一个只有actionuid的字典形式.处理数据主要使用pythonpandas库.

Read more »

Cmake介绍

CMake意为cross-platform make,可用于管理c/c++工程。CMake解析配置文件CMakeLists.txt生成Makefile,相比直接用Makefile管理工程,CMake更灵活和简单

Read more »


参考网址:
交换最小二乘

Tips:

矩阵中的最大的不相关的向量的个数,就叫秩
一个mn的矩阵,如果秩很低(秩r远小于m,n),则它可以拆成一个mr矩阵和一个rn矩阵之积(类似于SVD分解)。后面这两个矩阵所占用的存储空间比原来的mn矩阵小得多。

什么是ALS

  ALS是交替最小二乘(alternating least squares)的简称。在机器学习中,ALS特指使用交替最小二乘求解的一个协同推荐算法。它通过观察到的所有用户给商品的打分,来推断每个用户的喜好并向用户推荐适合的商品。这就是一个有m个的U(用户),与n个V(商品)的矩阵.

Read more »

Resilio(原名:BtSync)介绍

Resilio同步是PC和Mac,NAS,甚至服务器之间传输文件的最好方法

Resilio安装

  1. 下载,安装主程序
1
2
3
4
echo "deb http://linux-packages.resilio.com/resilio-sync/deb resilio-sync non-free" | sudo tee /etc/apt/sources.list.d/resilio-sync.list
wget -qO - https://linux-packages.resilio.com/resilio-sync/key.asc | sudo apt-key add -
apt-get update
apt-get install resilio-sync
  1. 开启任意主机连接
1
2
sed -i "s/127.0.0.1/0.0.0.0/g" /etc/resilio-sync/config.json
sed -i "s/127.0.0.1/0.0.0.0/g" /etc/resilio-sync/user_config.json
  1. 配置同步文件夹
    假设我们希望能把密钥的文件夹同步到 /data/sync ,我们需要给 /data/sync 设置Resilio Sync的用户权限,才能向这个文件夹写入内容。
1
chown -R rslsync /data/sync
  1. Resilio Sync控制命令
1
2
service resilio-sync start #启动
service resilio-sync stop #停止

5.开启防火墙端口

1
2
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport 8888 -j ACCEPT