Blogs

数据结构算法之合并两个有序序列

有序序列的合并,python实现。 #coding:utf-8 a = [2,4,6,8,10] b = [3,5,7,9,11,13,15] c = [] def merge(a,b): i,j = 0,0 while i<=len(a)-1 and j<=len(b)-1: if a[i]<b[j]: c.append(a[i]) i+=1 else: c.append(b[j]) j+=1 if i<=len(a)-1: for m in a[i:]: c.append(m) if j<=len(b)-1: for n in b[j:]: c.append(n) print(c) merge(a,b) 运行结果为: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15]

继续阅读

数据结构算法之排序

数据结构面试中经常会被问到篇排序相关的问题,那么这篇文章会研究下怎么用python来实现排序。 冒泡排序 #coding:utf-8 # 冒泡排序 def maopao(): a = [2,1,4,3,9,5,6,8,7] for i in range(len(a)-1): for j in range(len(a)-1-i): if a[j]>a[j+1]: temp = a[j] a[j] = a[j+1] a[j+1] = temp print(a) maopao() 结果为: [1, 2, 3, 4, 5, 6, 7, 8, 9] 归并排序 # 归并排序 def merge(a,b): i,j = 0,0 c = [] while i<=len(a)-1 and j<=len(b)-1: if a[i]<b[j]: c.append(a[i]) i+=1 else: c.append(b[j]) j+=1 if i<=len(a)-1: for m in a[i:]: c.

继续阅读

数据结构算法之二叉树

数据结构面试中经常会被问到篇二叉树相关的问题,那么这篇文章会研究下怎么用python来进行二叉树的构建和遍历。 注意:py2中 print root.elem, 在py3中要换成 print (root.elem,end=" ") # coding:utf-8 # 定义节点类 class Node: def __init__(self,elem = -1,): self.elem = elem self.left = None self.right = None # 定义二叉树 class Tree: def __init__(self): self.root = Node() self.myqu = [] # 添加节点 def add(self,elem): node = Node(elem) if self.root.elem == -1: # 判断如果是根节点 self.root = node self.myqu.append(self.root) else: treenode = self.myqu[0] if treenode.left == None: treenode.left = node self.

继续阅读

回归分析之Sklearn实现电力预测

参考原文:http://www.cnblogs.com/pinard/p/6016029.html 这里进行了手动实现,增强记忆。 1:数据集介绍 使用的数据是UCI大学公开的机器学习数据 数据的介绍在这: http://archive.ics.uci.edu/ml/datasets/Combined+Cycle+Power+Plant 数据的下载地址在这:http://archive.ics.uci.edu/ml/machine-learning-databases/00294/ 里面是一个循环发电场的数据,共有9568个样本数据,每个数据有5列,分别是:AT(温度), V(压力), AP(湿度), RH(压强), PE(输出电力)。我们不用纠结于每项具体的意思。 我们的问题是得到一个线性的关系,对应PE是样本输出,而AT/V/AP/RH这4个是样本特征, 机器学习的目的就是得到一个线性回归模型,即: $$ PE = \theta _{0} + \theta _{0} * AT + \theta _{0} * V +\theta _{0} * AP +\theta _{0}*RH $$ 而需要学习的,就是θ0,θ1,θ2,θ3,θ4这5个参数。 2:准备数据 下载源数据之后,解压会得到一个xlsx的文件,打开另存为csv文件,数据已经整理好,没有非法数据,但是数据并没有进行归一化,不过这里我们可以使用sklearn来帮我处理 sklearn的归一化处理参考:http://blog.csdn.net/gamer_gyt/article/details/77761884 3:使用pandas来进行数据的读取 import pandas as pd # pandas 读取数据 data = pd.read_csv("Folds5x2_pp.csv") data.head() 然后会看到如下结果,说明数据读取成功: AT V AP RH PE 0 8.34 40.77 1010.84 90.01 480.48 1 23.64 58.

继续阅读

Android屏幕适配

老文章了,拿到个人站里。 生成适配文件,我们先创建工具类,通过工具类直接生成适配文件,放到工程中即可。 工具类 下面工具类中,列举了10余种屏幕尺寸,如果有特殊分辨率需要适配,在main方法中添加即可。 设计师标注通常会以某个尺寸为基准标注一套尺寸,下面工具类以 720 * 1280 分辨率为基准,实际开发过程中,与设计师保持一致即可。 MakeXml.java import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintWriter; /** * Created by kongqw on 2015/11/21. */ public class MakeXml { // Mac路径 private final static String rootPath = "layoutroot/values-{0}x{1}/"; // Windows 路径 // private final static String rootPath = "C:\\layoutroot\\values-{0}x{1}\\"; /** * 设置基准分辨率 * 一般标注按照多大的图标,这里我们就设置多大尺寸 */ private final static float dw = 720f; private final static float dh = 1280f; private final static String WTemplate = "<dimen name=\"x{0}\">{1}px</dimen>\n"; private final static String HTemplate = "<dimen name=\"y{0}\">{1}px</dimen>\n"; // 手机分辨率 public static void main(String [] args){ makeString(320, 480); makeString(480, 800); makeString(480, 854); makeString(540, 960); makeString(600, 1024); makeString(720, 1184); makeString(720, 1196); makeString(720, 1280); makeString(768, 1024); makeString(800, 1280); makeString(1080, 1812); makeString(1080, 1920); makeString(1440, 2560); } public static void makeString(int w, int h) { StringBuffer sb = new StringBuffer(); sb.

继续阅读

回归分析之线性回归(N元线性回归)

在上一篇文章中我们介绍了 回归分析之理论篇,在其中我们有聊到线性回归和非线性回归,包括广义线性回归,这一篇文章我们来聊下回归分析中的线性回归。 一元线性回归 预测房价: 输入编号 | 平方米 | 价格 -|-|- 1 | 150 | 6450 2 | 200 | 7450 3| 250 |8450 4| 300 |9450 5| 350 |11450 6| 400 |15450 7| 600| 18450 针对上边这种一元数据来讲,我们可以构建的一元线性回归函数为 $$ H(x) = k*x + b $$ 其中H(x)为平方米价格表,k是一元回归系数,b为常数。最小二乘法的公式: $$ k =\frac{ \sum{1}^{n} (x{i} - \bar{x} )(y{i} - \bar{y}) } { \sum{1}^{n}(x_{i}-\bar{x})^{2} } $$ 自己使用python代码实现为: def leastsq(x,y): """ x,y分别是要拟合的数据的自变量列表和因变量列表 """ meanX = sum(x) * 1.

继续阅读

几种距离计算公式在数据挖掘中的应用场景分析

本文涉及以下几种距离计算公式的分析,参考资料为《面向程序员的数据挖掘指南》 曼哈顿距离 欧几里得距离 闵可夫斯基距离 皮尔逊相关系数 余弦相似度 之前整理过一篇关于距离相关的文章:[机器学习算法中的距离和相似性计算公式,分析以及python实现]() 闵可夫斯基距离 两个n维变量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的闵可夫斯基距离定义为: $$ \sqrt[p]{ \sum{k=1}^{n} \left | x{1k}-x_{2k} \right |^p} $$ 其中p是一个变参数。 当p=1时,就是曼哈顿距离 当p=2时,就是欧氏距离 当p→∞时,就是切比雪夫距离 根据变参数的不同,闵氏距离可以表示一类的距离。 p值越大,单个维度的差值大小会对整体距离有更大的影响 曼哈顿距离/欧几里得距离的瑕疵 在《面向程序员的数据挖掘指南》中给出了这样一组样例数据, 下图为一个在线音乐网站的的用户评分情况,用户可以用1-5星来评价一个乐队,下边是8位用户对8个乐队的评价: 表中的横线表示用户没有对乐队进行评价,我们在计算两个用户的距离时,只采用他们都评价过的乐队。 现在来求Angelica和Bill的距离,因为他们共同评分过的乐队有5个,所以使用其对该5个乐队的评分进行曼哈顿距离的计算为: Dis_1 = |3.5-2| + |2-3.5| + |5-2| + |1.5-3.5| + |2-3| = 9 同样使用欧式距离计算为: Dis_2 = sqrt( (3.5-2)^2 + (2-3.5)^2 + (5-2)^2 + (1.5-3.5)^2 + (2-3)^2 ) = 4.3 当对Angelica和Bill,Bill和Chan进行距离对比时,由于两者的共同评分过的乐队均为5,数据都在一个5维空间里,是公平的,如果现在要计算Angelica和Hailey与Bill的距离时,会发现,Angelica与Bill共同评分的有5个乐队,Hailey与Bill共同评分的有3个乐队,也就是说两者数据一个在5维空间里,一个在三维空间里,这样明显是不公平的。这将会对我们进行计算时产生不好的影响,所以曼哈顿距离和欧几里得距离在数据完整的情况下效果最好。 用户问题/皮尔逊相关系数/分数膨胀 现象——用户问题 仔细观察用户对乐队的评分数据,可以发现每个用户的评分标准不同: Bill没有打出极端的分数,都在2-4分之间 Jordyn似乎喜欢所有的乐队,打分都在4-5之间 Hailey是一个有趣的人,他的评分不是1就是4 那么如何比较这些用户呢?比如说Hailey的4分是相当于Jordyn的4分还是5分呢?我觉得更接近5分,这样一来,就影响推荐系统的准确性了!

继续阅读

Git指令

查看用户名及邮箱地址 $ git config user.name $ git config user.email 修改用户名及邮箱地址 $ git config --global user.name "用户名" $ git config --global user.email "邮箱地址"

继续阅读

即拿即用一Android文件存取

写文件 读文件 Assets文件读取 Bitmap保存 文件删除 写文件 /** * 写文件 * * @param filePath 文件绝对路径 * @param content 写入内容 * @return 写入是否成功 */ public static boolean writeFile(String filePath, String content) { FileOutputStream fileOutputStream = null; BufferedOutputStream bufferedOutputStream = null; try { File file = new File(filePath); if (file.createNewFile()) { fileOutputStream = new FileOutputStream(filePath); bufferedOutputStream = new BufferedOutputStream(fileOutputStream); bufferedOutputStream.write(content.getBytes("UTF-8")); bufferedOutputStream.flush(); return true; } } catch (IOException e) { e.printStackTrace(); } finally { if (null !

继续阅读

数据归一化和其在sklearn中的处理

一:数据归一化 数据归一化(标准化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。 归一化方法有两种形式,一种是把数变为(0,1)之间的小数,一种是把有量纲表达式变为无量纲表达式。在机器学习中我们更关注的把数据变到0~1之间,接下来我们讨论的也是第一种形式。 1)min-max标准化 min-max标准化也叫做离差标准化,是对原始数据的线性变换,使结果落到[0,1]区间,其对应的数学公式如下: $$ X_{scale} = \frac{x-min}{max-min} $$ 对应的python实现为 # x为数据 比如说 [1,2,1,3,2,4,1] def Normalization(x): return [(float(i)-min(x))/float(max(x)-min(x)) for i in x] 如果要将数据转换到[-1,1]之间,可以修改其数学公式为: $$ X{scale} = \frac{x-x{mean}}{max-min} $$ x_mean 表示平均值。 对应的python实现为 import numpy as np # x为数据 比如说 [1,2,1,3,2,4,1] def Normalization(x): return [(float(i)-np.mean(x))/float(max(x)-min(x)) for i in x] 其中max为样本数据的最大值,min为样本数据的最小值。这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。 该标准化方法有一个缺点就是,如果数据中有一些偏离正常数据的异常点,就会导致标准化结果的不准确性。比如说一个公司员工(A,B,C,D)的薪水为6k,8k,7k,10w,这种情况下进行归一化对每个员工来讲都是不合理的。 当然还有一些其他的办法也能实现数据的标准化。 2)z-score标准化 z-score标准化也叫标准差标准化,代表的是分值偏离均值的程度,经过处理的数据符合标准正态分布,即均值为0,标准差为1。其转化函数为 $$ X_{scale} = \frac{x-\mu }{\sigma } $$ 其中μ为所有样本数据的均值,σ为所有样本数据的标准差。 其对应的python实现为: import numpy as np #x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] def z_score(x): return (x - np.

继续阅读