qypx の blog

机会是留给有准备的人的.

来源于:
https://github.com/NLP-LOVE/ML-NLP/tree/master/Project/17.%20Recommendation%20System

1. 基本思想

推荐系统中一个重要的分支,隐语义建模。隐语义模型LFM:Latent Factor Model,其核心思想就是通过隐含特征联系用户兴趣和物品

过程分为三个部分,将物品映射到隐含分类,确定用户对隐含分类的兴趣,然后选择用户感兴趣的分类中的物品推荐给用户。它是基于用户行为统计的自动聚类。

隐语义模型在Top-N推荐中的应用十分广泛。常用的隐语义模型,LSA(Latent Semantic Analysis),LDA(Latent Dirichlet Allocation),主题模型(Topic Model),矩阵分解(Matrix Factorization)等等。

首先通过一个例子来理解一下这个模型,比如说有两个用户A和B,目前有用户的阅读列表,用户A的兴趣涉及侦探小说,科普图书以及一些计算机技术书,而用户B的兴趣比较集中在数学和机器学习方面。那么如何给A和B推荐图书呢?

对于UserCF,首先需要找到和他们看了同样书的其他用户(兴趣相似的用户),然后在给他们推荐那些用户喜欢的其他书。 对于ItemCF, 需要给他们推荐和他们已经看的书相似的书,比如用户B 看了很多数据挖掘方面的书,那么可以给他推荐机器学习或者模式识别方面的书。

还有一种方法就是使用隐语义模型,可以对书和物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。

阅读全文 »

来源:Time Series Forecasting using Python - Analytics Vidhya

简介

What is Time Series Analysis?

As the name ‘time series forecasting’ suggests, it involves working on time (years, days, hours, minutes) based data, to derive hidden insights to make informed decision making.

Importance of Time Series Analysis

Time series models are very useful models when you have serially correlated data as shown above. Most businesses work on time series data to analyze

  • Sales numbers for the next year
  • Website Traffic
  • Competition Position
  • Demand of products
  • Stock Market Analysis
  • Census Analysis
  • Budgetary Analysis

This is just the tip of the iceberg and there are numerous prediction problems that involve a time component and concepts of time series analysis come into picture.

Why is Time Series Forecasting Challenging?

But what makes a time series more challenging than say a regular regression problem? There are 2 things:

  • Time Dependence of a time series - The basic assumption of a linear regression model that the observations are independent doesn’t hold in this case.
  • Seasonality in a time series - Along with an increasing or decreasing trend, most time series have some form of seasonal trends, i.e. variations specific to a particular time frame.
阅读全文 »

https://blog.csdn.net/foreverhuylee/article/details/37813053?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

  1. 数组就是相同数据类型的元素按一定顺序排列的集合。

    一句话:就是物理上存储在一组联系的地址上。也称为数据结构中的物理结构。

  2. 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。

    一句话:线性表是数据结构中的逻辑结构。可以存储在数组上,也可以存储在链表上。

  3. 线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法。用顺序存储方法存储的线性表简称为顺序表。

一句话:用数组来存储的线性表就是顺序表。

二维数组中的查找

https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&tqId=11154&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

方法

从左下找

https://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e?answerType=1&f=discussion

对于左下角的值 m,m 是该行最小的数,是该列最大的数 每次将 m 和目标值 target 比较:

  1. 当 m < target,由于 m 已经是该行最大的元素,想要更大只有从列考虑,取值右移一位
  2. 当 m > target,由于 m 已经是该列最小的元素,想要更小只有从行考虑,取值上移一位
  3. 当 m = target,找到该值,返回 true

用某行最小或某列最大与 target 比较,每次可剔除一整行或一整列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Solution {
public boolean Find(int target, int [][] array) {
int r = array.length;
int c = array[0].length;

// 左下角
int cur_r = r - 1;
int cur_c = 0;

while(cur_r >= 0 && cur_c <= c-1){
int cur = array[cur_r][cur_c];
if(target == cur)
return true;
else if(target < cur)
cur_r--;
else if(target > cur)
cur_c++;
}
return false;
}
}

复杂度

时间复杂度:O(行高 + 列宽) 空间复杂度:O(1)


从尾到头打印链表

https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tqId=11156&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目描述

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

法一:将链表翻转,再依次加入ArrayList

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ListNode cur = listNode;
ListNode prev = null;

while(cur != null){
ListNode tmp = cur.next;
cur.next = prev;
prev = cur;
cur = tmp;
}

ArrayList<Integer> arr = new ArrayList<>();
while(prev != null){
arr.add(prev.val);
prev = prev.next;
}
return arr;
}
}

法二:利用ArrayList的方法add(int index, E element),每次将链表中的元素添加至索引0处

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ListNode cur = listNode;
ArrayList<Integer> arr = new ArrayList<>();

while(cur != null){
arr.add(0,cur.val);
cur = cur.next;
}

return arr;
}
}

复杂度

时间复杂度:O(n) 空间复杂度:O(n)

阅读全文 »

安装包

1
pip install package-name

若安装过程中出现[WinError 5]错误,可尝试使用pip install --user package-name

参考 https://www.lizenghai.com/archives/585.html

指定源:

参考 https://blog.csdn.net/dss875914213/article/details/86500146

1
pip install package-name -i https://pypi.tuna.tsinghua.edu.cn/simple 
1
2
3
4
5
6
7
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
腾讯云:https://mirrors.cloud.tencent.com/pypi/simple

查看pip版本

1
2
3
4
>>>pip -V
pip 20.3.4 from d:\anaconda\anaconda\lib\site-packages\pip (python 3.5)

↑如果显示使用的python2,可以用pip3来使用python3

升级pip

1
pip install --upgrade pip

所有已安装的包

1
pip list

查看某个已安装包

1
pip show package_name

检查哪些包需要更新

1
pip list --outdated

升级包

1
pip install --upgrade package_name

安装某个版本的包

1
pip install numpy==1.18

卸载包

1
pip uninstall package_name

使用pip –help命令可以查看pip帮助手册

0%