系统思维

系统思维

系统与涌现

系统

系统是由一组实体和这些实体之间的关系所构成的集合,其功能要大于这些实体各自的功能之和

涌现

指系统在运作时所表现、呈现或浮现的东西,是系统思维的目标,同时也可以体现出系统思维的艺术

1、确定系统及其形式与功能

形式

形式是指 这个系统是什么样子的

功能

功能描述系统能做什么

功能是由过程+操作数组成的

2、确定系统中的实体及其形式功能

具备形式和功能的实体

确定如何将系统初步分解为恰当的实体

1、用整体思维找出系统中的潜在实体

整体原则

每个系统都作为某一个或某些个大系统的一小部分而运作,

同时,每个系统中也都包含着更小的一些系统。

要整体地思考这些关系,并研发出与上级系统、下级系统和平级系统相协调地架构

已知的不确定物

未知的不确定物

2、集中注意,找出系统中的重要实体

在聚焦过程中,关键要把当前的疑问、状况、难题确定出来,
并把其中的最重要方面凸显出来

3、为实体创建抽象或从实体中发现抽象

4、定义系统的边界,并将其与外围环境隔开

3、确定实体之间的关系

实体之间必须要具备关系

形式上的关系

结构关系

功能上的关系

交互关系

4、涌现

基于实体的功能以及实体之间的功能互动,来确定系统的涌现属性

预测方式

1、根据以前做过的情况来预测

2、做试验

3、建模

系统所涌现出来的功能,依赖于系统中各实体的功能以及实体之间的功能交互。

机器学习的数学基础

 

机器学习的数学基础

1.      现代数学

1.1.       概率论

1.1.1.    说明事物可能会怎么样

1.2.       数值分析

1.2.1.    分析揭示为什么这样,以及如何变成这样

1.3.       线性代数

1.3.1.    事物从来不只有一个样子,使我们能从多个角度观察事物

2.      相似性的度量

2.1.       两个向量之间的距离计算,在数学上称为向量的距离,也称为样本之间的相似性度量

2.2.       范数

2.2.1.    向量的范数可以简单、形象地理解为向量的长度,或者向量到坐标系原点的距离,或者相应空间内的两点之间的距离

3.      各类距离的意义与Python的实现

3.1.       距离公式

3.1.1.    闵可夫斯基距离

3.1.2.    欧式距离

3.1.3.    曼哈顿距离

3.1.4.    切比雪夫距离

3.1.5.    夹角余弦

3.1.6.    汉明距离

3.1.7.    杰卡德相似系数

4.      理解随机性

4.1.       蝴蝶效应

4.2.       确定性与随机性

5.      回顾概率论

5.1.       概率论基础

5.1.1.    样本

5.1.2.    样本空间

5.1.3.    随机事件

5.1.4.    随机变量

5.1.5.    随机变量的概率分布

5.2.       贝叶斯公式

5.2.1.    贯穿机器学习总随机问题分析的全过程

5.2.2.    从文本分类到概率模型,基本原理都是贝叶斯公式,它是机器学习领域最重要的基础概念

6.      多元统计基础

6.1.       随机向量的联合概率分布和边缘概率分布描述了对象特征间的概率关系

6.2.       在机器学习中,对象及对象构成的矩阵都是多元数据,因此,所有与概率相关的算法都以对象的联合概率分布和边缘概率分布为运算基础

6.3.       多元统计算法

6.3.1.    朴素贝叶斯分析

6.3.2.    回归分析

6.3.3.    统计学习理论

6.3.4.    聚类分析

6.3.5.    主成分分析

6.3.6.    概率图模型

7.      特征间的相关性

7.1.       随机变量的数字特征 规律性

7.1.1.    期望

7.1.2.    方差

7.1.3.    协方差矩阵和相关系数

  • 相关系数
  • 马氏距离

8.      再谈矩阵-空间的变换

8.1.       由特征列的取值范围所有构成的矩阵空间应具有完整性,即能够反映事物的空间形式或变化规律

8.1.1.    向量

8.1.2.    向量张成空间

8.1.3.    向量的空间变换

8.1.4.    向量组与矩阵的变换–理解矩阵乘法

8.1.5.    线性变换–特征值与特征向量

9.      数据归一化

9.1.       数据标准化

9.2.       对欧式距离的标准化

对象、矩阵与矢量化编程

 

# 对象、矩阵与矢量化编程
## 对象与矩阵
### 在机器学习中,对象是指含有一组特征的行向量,利用矩阵将对象进行量化
## 初识矩阵
### 矩阵是具有相同特征和维度的对象集合,表现为一张二维数据表
### 一个对象表示为矩阵中的一行,一个特征表示为矩阵中的一列,每个特征都有数值型的取值
### 特征相同、取值相异的对象集合所构成的矩阵。使对象之间既相互独立,又相互联系
### 由特征列的取值范围所有构成的矩阵空间应具有完整性,即能够反映出事物的空间形式或变化。
### 分类或聚类可以看做根据对象特征的相似性与差异性,对矩阵空间的一种划分
### 预测或回归可以看做根据对象在某种序列(时间)上的相关性,表现为特征取值变化的一种趋势
### 分类、聚类和回归是机器学习的最基本的主题。通过矩阵,可以构建客观事物的多维数学模型,并通过条件概率分布、梯度、神经网络、协方差等运算方式,多角度地认识和分析事物
## 矢量化编程与GPU运算
### 矢量化编程 可以直接将数学公式转换为相应的程序代码,极大的方便了程序的阅读和调试
### GPU芯片在浮点运算、大规模并行计算方面,可以提供数十倍乃至上百倍于CPU的性能
## 理解数学公与NumPy矩阵运算
## Linalg线性代数库

机器学习的几个思考

1、机器与人的区别

人是一种善于利用工具来解决问题、实现目的的动物

人和机器(计算机)对比表现出来的几个缺点:

1、信息存储量

2、对信息的计算速度

3、重复执行

 

2、机器模拟人进行工作

人类的行为是一种根据反馈信息来进行判断,然后去执行。机器模拟此过程,也应该按照这个逻辑进行:

1、机器必须学会辨别物体。物体通常带有一定的特征,人是通过这些特征来识别不同的物体。带有同样特征的,定义为同一类型物体,不同特征的为不同物体。

 

人工智能也一样,必须通过寻找特征、识别特征来识别物体。然后才能进行进一步的操作。

PHP底层学习-源码整体框架 3 PHP源码目录结构

# PHP源码目录
## SAPI目录
### 对输入和输出层的抽象,是PHP提供对外服务的规范
## Zend目录
### 内存管理模块
### 垃圾回收
### 数组实现
## main目录
### 解析SAPI的请求,分析要执行的脚本文件和参数
### 调用Zend引擎之前,完成必要的初始化工作
## ext目录
### PHP扩展相关的目录
## TSRM目录
### 线程安全资源管理器
### PHP的线程安全机制
* 在线程环境下,为每个线程提供独立的全局变量副本
* 具体实施是

通过TSRM为每个线程分配(分配前加锁)一个独立ID(自增)作为当前线程的全局变量内存区索引。

在以后的全局变量访问中,实现线程之间的完成独立

PHP底层学习–源码整体框架 2 PHP7内核架构

分为4部分:

1、Zend引擎(提供基础服务)

词法/语法分析、AST编译和opcodes的执行

变量的设计、内存管理、进程管理等都在Zend引擎实现

2、PHP 层(应用层)

处理来自外部的交互

3、SAPI

Server API。定义PHP输入/输出规范。

4、扩展部分

Zend引擎提供了核心能力和接口规范。在此基础上进行扩展开发。

每日系统设计学习–入门

第一步:回顾可扩展性(scalability)的视频讲座
哈佛大学可扩展性讲座

主题涵盖
垂直扩展(Vertical scaling)
水平扩展(Horizontal scaling)
缓存
负载均衡
数据库复制
数据库分区
第二步:回顾可扩展性文章
可扩展性

主题涵盖:
Clones
数据库
缓存
异步
接下来的步骤
接下来,我们将看看高阶的权衡和取舍:

性能与可扩展性
延迟与吞吐量
可用性与一致性
记住每个方面都面临取舍和权衡。

然后,我们将深入更具体的主题,如 DNS、CDN 和负载均衡器。

PHP底层学习-源码整体框架 1 PHP执行流程

1、词法分析将PHP代码转换为有意义的标识Token。该步骤的词法分析器使用Re2c实现。

2、语法分析将Token和符合文法规则的代码生成抽象语法树。语法分析器基于Bison实现。语法分析使用了BNF来表达文法规则,Bison借助状态机、状态转移表和压栈、出栈等一系列操作,生成抽象语法树。

3、上步的抽象语法树生成对应的opcode,并被虚拟机执行。opcode是PHP7定义的一组指令标识,指令对应着相应的handler(处理函数)。当虚拟机调用opcode,会找到opcode背后的处理函数,执行真正的处理。

leetcode 每日一题:数组– 寻找数组的中心索引

给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。

我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。

如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。

示例 1:

输入:
nums = [1, 7, 3, 6, 5, 6]
输出: 3
解释:
索引3 (nums[3] = 6) 的左侧数之和(1 + 7 + 3 = 11),与右侧数之和(5 + 6 = 11)相等。
同时, 3 也是第一个符合要求的中心索引。
示例 2:

输入:
nums = [1, 2, 3]
输出: -1
解释:
数组中不存在满足此条件的中心索引。
说明:

nums 的长度范围为 [0, 10000]。
任何一个 nums[i] 将会是一个范围在 [-1000, 1000]的整数。

code:
public class Main {
public static void main(String[] args) {
int[] nums = {-1,-1,-1,1,1,1};
int result = pivotIndex(nums);
System.out.println(“result:”+result);
}

public static int pivotIndex(int[] nums) {

int length = nums.length;

if( length <= 2 ) { System.out.println("length <= 2"); return -1; } int result = -1; for(int i = 0; i <= length-1; i++) { System.out.println("------------------------"); int sumLeft = sumLeft(nums, i); int sumRight = sumRight(nums, i); if( sumLeft == sumRight) { result = i; break; } } return result; } public static int sumLeft(int[] nums, int i) { int sum = 0; int length = nums.length; for( int j = 0; j < i; j++ ) { sum = sum + nums[j]; } System.out.println("left:"+sum); return sum; } public static int sumRight( int[] nums, int i) { int sum = 0; int length = nums.length; for( int j = length-1; j > i; j– ){
sum = sum + nums[j];
}
System.out.println(“right:”+sum);
return sum;
}
}