Peter's Blog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 搜索

PHP接口返回500错误状态码解决方法

发表于 2018-11-17 | 分类于 PHP

背景

最近在用PHP写用户登录接口,但是将PHP代码部署到生产环境却发生了错误,用浏览器访问接口产生错误状态码500如下:

1
HTTP ERROR 500

这个错误是由于PHP代码存在错误引起的,但是默认PHP是关闭错误提示的。如果想要知道代码的错误必须先打开PHP的错误显示功能。

解决方法

首先声明笔者使用的生产环境是Ubuntu 16.04。

第一步:先找到PHP的配置文件php.ini文件所在位置,这里笔者的Ubuntu中的php7的php.ini存在于路径/etc/php/7.0/apache2/下面,我们只需要使用vi/vim从上述路径下打开php.ini文件;

第二步:查找并修改php.ini文件中的display_errors和display_startup_errors中的值为On即可;

修改后的内容如下:

1
2
3
#修改你的php.ini文件
display_errors = On
display_startup_errors = On
阅读全文 »

Python大数据量计数

发表于 2018-09-10 | 分类于 算法

和上一篇文章一样,这篇文章也是我在数学建模中碰到的,如果只是普通数据量的计数问题那么我们不妨使用counter,但是如果数据量达到一定规模,那么我们不得不考虑其他算法来解决问题了。我们这里使用hyperloglog算法来实现大数据量计数问题,这种算法是一种基于统计的计数算法,算法并不一定准确,但是足够快,如果读者将速度放在第一位那么不妨试试这种算法,而且hyperloglog算法准确率逼近100%,试问1000001和100000又有多大的差距呢,所以这种算法是有一定实用性的。

代码实现

当然作为胶水语言的Python,我们当然不必重复造轮子,这里我们可以直接使用python的bounter库来实现hyperloglog算法计数。

安装方法:pip install bounter

这里给出bounter在github上的官方教材使用的代码:

示例一:

1
2
3
4
5
6
7
from bounter import bounter
counts = bounter(size_mb=1024) # use at most 1 GB of RAM
counts.update([u'a', 'few', u'words', u'a', u'few', u'times']) # count item frequencies
print(counts[u'few']) # query the counts
2

示例二

1
2
3
4
5
6
7
8
9
10
11
12
13
from bounter import bounter
counts = bounter(size_mb=200) # default version, unless you specify need_items or need_counts
counts.update(['a', 'b', 'c', 'a', 'b'])
print(counts.total(), counts.cardinality()) # total and cardinality still work
(5L, 3)
print(counts['a']) # individual item frequency still works
2
print(list(counts)) # iterator returns keys, just like Counter
[u'b', u'a', u'c']
print(list(counts.iteritems())) # supports iterating over key-count pairs, etc.
[(u'b', 2L), (u'a', 2L), (u'c', 1L)]
阅读全文 »

Python实现最近点对求解

发表于 2018-09-10 | 分类于 算法

数学建模中遇到求最近点对的问题,按理说我们使用朴素法进行暴力求解答案也是可行的,但是由于数据过于庞大,我们最初使用朴素法在计算机上跑了6个小时都没有得到问题的解,最终只得作罢。后来我们利用分治法解决了最近点对问题,具体思路参看这里。

分治法

分治法解决最近点对问题的算法过程读者可以参见上文给出的参考博客。分治法的思想就是先将问题分解成一个个小的问题,最后将小问题的答案合并得到问题的解。这其中关键步骤是分解与合并,具体实现方法是使用递归,核心思想是空间换时间。

阅读全文 »

Python实现argsort排序返回索引值

发表于 2018-09-05 | 分类于 代码

插曲是这样的,之前一直在给别人写外包程序,在程序中我使用到了numpy库中的argsort排序方法,这个排序方法十分方便,对可迭代对象进行排序并返回原顺序的索引值。由于程序要传给客户,所以我将代码封装成了exe可执行程序。之前封装出来的程序最多也就40来兆,可是自从我将开发环境切换到anaconda后,封装出来的程序高达200多兆,简直吓死我了。今天客户再次需要这个程序,于是我决定抛弃numpy库,自己实现argsort算法。

numpy实现

首先来看看numpy库中argsort的用法:

1
argsort(a, axis=-1, kind='quicksort', order=None)

第一个参数是需要排序的可迭代对象,第二个参数是排序的维度,第三个参数是排序的算法,常见的有快排(quicksort)、堆排序(heapsort)以及归并排序(mergesort)。第四个参数是排序的次序。

实例:

1
2
3
4
5
6
import numpy as np
li = [1.5, 3, 15, 21, 7, 31, 5]
indies = np.argsort(li, kind='heapsort')
print(indies)

运行结果:

1
[0 1 6 4 2 3 5]
阅读全文 »

模糊综合评价法原理及实现

发表于 2018-09-02 | 分类于 数学建模

模糊综合评价法原理

基本思想

模糊综合评价法是一种基于模糊数学的综合评价方法。该综合评价法根据模糊数学的隶属度理论把定性评价转化为定量评价,即用模糊数学对受到多种因素制约的事物或对象做出一个总体的评价。它具有结果清晰,系统性强的特点,能较好地解决模糊的、难以量化的问题,适合各种非确定性问题的解决。

隶属度

隶属函数,也称为归属函数或模糊元函数,是模糊集合中会用到的函数,是一般集合中指示函数的一般化。指示函数可以说明一个集合中的元素是否属于特定子集合。一元素的指示函数的值可能是0或是1,而元素的隶属函数会是0到1之间的数值,表示元素属于某模糊集合的“真实程度”(degree of truth)即隶属度。

基本模型

设评判对象为P: 其因素集 $ U={ u_1, u_2, \cdots , u_n } $ ,评判等级集 $ V={ v_1, v_2, \cdots ,v_m } $ 。对U中每一因素根据评判集中的等级指标进行模糊评判,得到评判矩阵:

通常为了避免量纲的影响,我们还要进行去量纲操作。

其中,$r{ij}$表示$u_i$关于$v_j$的隶属度。(U,V,R) 则构成了一个模糊综合评判模型。确定各因素重要性指标(也称权数)后,记为$A={ a_1,a_2, \cdots,a_n }$,满足$\sum{i=1}^na_i=1$,合成得

经归一化后,得 $ B= { b_i, b_2, \cdots, b_m } $ ,于是可确定对象P的评判等级。

如果想得到综合得分,那么我们还可以对B进一步打分,即以同样的方式设置权数,对B进行综合评定。

对问题进行模糊综合分析之后我们通常还要考察该模型的置信度。

阅读全文 »

数学建模笔记

发表于 2018-08-29 | 分类于 数学建模

优化模型

优化模型就是给定一个目标函数,然后在约束条件下求出该目标函数的最优值。

形如:

决策变量: x

目标函数: f(x)

约束条件: $ s.t. g_i(x)\leq0 $

优化问题三要素:

  • 决策变量
  • 目标函数
  • 约束条件

数学规划:

  • 线性规划(Linear Programming,简称LP)
  • 非线性规划(Nonlinear Programming,简称NLP)
  • 整数规划
阅读全文 »

灰色关联分析模型及其改进

发表于 2018-08-28 | 分类于 数学建模

灰色关联分析基本原理

对于两个系统之间的因素,其随时间或不同对象而变化的关联性大小的度量,称为关联度。而根据因素之间发展趋势的相似或相异程度作为衡量因素间关联程度的方法称为灰色关联分析方法。对于本题衡量客户接受的程度与哪些因素关联度更高,我们可以使用灰色关联分析来衡量购买价格、维护成本、车门数、人员携带能力、行李箱大小、汽车安全性能等调查项和汽车可接受性之间的关联程度。

首先,我们定义数据矩阵的最后一列l为标准要素,其余各列为需要比较的要素,分别用x‘l和x‘i表示。

第一步:数据标准化

第二步:求差序列

第三步:求两极差

第四步:计算关联系数

第五步:求灰色关联度

阅读全文 »

Python爬虫入门实践

发表于 2018-01-23 | 分类于 爬虫

写这篇博客,一来是整理我最近一两个月的数据抓取经验,二来是帮助新手快速入门爬虫。听到爬虫这个词很多人可能会联想到谷歌,百度,必应等搜索引擎,它们拥有强大的数据检索能力,为我们查找资料提供了极大的帮助。这些搜索引擎之所以强大就是因为它们有一个强大的数据抓取系统。下面我们从0到1逐层展开讲解。

基础

其实爬虫很简单,归结起来就是下面两个步骤:

  1. 获取网页源代码
  2. 解析源代码获取需要的信息

获取网页源代码

在Python3中,获取网页源代码通常有两种方式:第一种是通过Python3自带的urllib库中的request.urlopen函数来请求网页源代码;第二种方式也是最常使用的方式就是使用requests库来实现网页的抓取。

urllib

首先我先来简单的介绍一下urllib库请求网页的方法:

from urllib.request import urlopen
response = urlopen('https://pixabay.com/en/') #抓取全球著名免费矢量图网站pixabay
html = response.read()

requests

下面开始介绍本教程获取网页源代码主要使用的工具:requests
requests的使用很简单和urllib类似:

import requests
response = requests.get('https://pixabay.com/en/') #注意一定要加上url前面的安全协议https或者http不然系统会报错。
response.encoding = 'utf-8' #设置网页的源代码编码格式为utf-8,你可以根据具体情况设置诸如gbk(国标)等编码格式。
html = response.text #获取源代码
阅读全文 »

开源啦!60维维基百科词向量免费放送

发表于 2018-01-08 | 分类于 深度学习 , NLP

开源啦!60维维基百科词向量免费放送

使用说明

在本次开源数据中共包含4个文件,分别如下:
wiki.zh.text.model
wiki.zh.text.model.syn1neg.npy
wiki.zh.text.model.wv.syn0.npy
wiki.zh.text.vector
其中我们需要使用的仅有wiki.zh.text.model、wiki.zh.text.vector其余两个是numpy自动生成的数据。如果你的需求是计算词之间的距离,可以使用gensim包具体用法如下:

import gensim #导入gensim包
model = gensim.models.Word2Vec.load("wiki.zh.text.model") #加载词向量模型
result = model.most_similar(u'足球')
for each in result:
    print each[0] , each[1]
阅读全文 »

自然语言处理入门实践

发表于 2017-11-16 | 分类于 深度学习 , NLP

自然语言处理入门实践

人工智能领域中有两个主流方向即机器视觉(CV)和自然语言处理(NLP)。其中自然语言处理(英语:Natural Language Processing,缩写作 NLP)是人工智能和语言学领域的分支学科。自然语言处理领域主要探讨如何处理及运用自然语言。自然语言处理包括多方面和步骤,基本有认知、理解、生成等部分。下面介绍一些NLP的基础知识。

分词

  提到自然语言处理当然不得不提大名鼎鼎的自然语言处理工具包NLTK了。NLTK在国外很流行,它提供包括英文分词、词性标注、命名实体的识别等等自然语言处理中的基本操作。如果各位想体验NLTK你可以通过pip install nltk来安装nltk。
​  但是nltk只支持英文分词,如果想对中文进行切词还得另谋他法。英文分词很方便,直接按照空格分割字符串就可以切出token字串,但是汉语是没有使用空格来分割词语。所以我给大家提供了一下几种汉语分词解决方案。

  1. 使用斯坦福大学分词器+nltk包,完美解决nltk对汉语的兼容。
  2. 使用jieba分词。
  3. 使用哈工大语言技术平台的python封装包pyltp
阅读全文 »
123
Peter Chiang

Peter Chiang

Stay hungry, stay foolish!

23 日志
14 分类
40 标签
RSS
GitHub E-Mail Weibo Zhihu
友情链接
  • 52nlp
  • 科学空间
  • 阿拉灯神丁Vicky侃AI
© 2022 Peter Chiang
由 Hexo 强力驱动
主题 - NexT.Gemini