我正在使用C#6.0中基于项目的协同过滤器为餐馆推荐一个推荐系统.我想设置我的算法以尽可能好地执行,所以我已经做了一些关于预测用户尚未审查的餐馆评级的不同方法的研究.
我将从我所做的研究开始
首先,我想建立一个基于用户的协作过滤器,使用用户之间的皮尔逊相关性,以便能够看到哪些用户很好地融合在一起.
这个问题的主要问题是能够计算这种相关性所需的数据量.首先,您需要在同一家餐厅每2位用户进行4次评论.但我的数据将非常稀少.2个用户不太可能会审查完全相同的4家餐馆.我想通过扩大匹配条款来解决这个问题(即不匹配相同餐馆的用户,但是在相同类型的餐馆),但这给了我一个问题,即很难确定我将在相关性中使用哪些评论,因为用户可以在"快餐"类型的餐厅留下3条评论.其中哪一个最符合其他用户对快餐店的评价?
经过更多的研究,我得出结论,基于项目的协作过滤器优于基于用户的协作过滤器.但同样,我遇到了数据稀疏性问题.在我的测试中,我成功地计算了用户尚未审查的餐馆评级的预测,但是当我在稀疏数据集上使用该算法时,结果不够好.(大多数时候,两家餐馆之间不可能有相似之处,因为没有2位用户评价同一家餐厅).
经过更多研究后,我发现使用矩阵分解方法可以很好地处理稀疏数据.
现在我的问题
我一直在互联网上寻找使用这种方法的教程,但我没有任何推荐系统的经验,我对代数的了解也很有限.我理解方法的正义.你有一个矩阵,你有1边用户,另一边有餐馆.每个单元格是用户在餐厅上给出的评级.
矩阵分解方法创建两个这样的矩阵,一个具有用户和餐馆类型之间的权重,另一个具有餐馆和这些类型之间的权重.
我无法弄清楚的是如何计算餐厅类型和餐馆/用户之间的权重(如果我正确理解矩阵分解).我找到了几十个计算这些数字的公式,但我无法弄清楚如何将它们分解并应用于我的应用程序中.
我将举例说明数据在我的应用程序中的外观:
在此表中,U1代表用户,R1代表餐馆.每个餐厅都有自己的标签(餐厅类型).即R1具有"意大利"标签,R2具有"快餐"等.
| R1 | R2 | R3 | R4 |
U1 | 3 | 1 | 2 | - |
U2 | - | 3 | 2 | 2 |
U3 | 5 | 4 | - | 4 |
U4 | - | - | 5 | - |
Run Code Online (Sandbox Code Playgroud)
有没有人可以指出我正确的方向或解释我应该如何在我的数据上使用这种方法?任何帮助将不胜感激!
我正在研究一种可以生成两种推荐,餐馆和菜肴的算法.所有这一切都很好,但我想在一个列表中合并这两种类型的建议,这是我遇到一些问题的地方.从我之前的问题我得出结论,我需要一个包装类,我已经设置了这样:
public class RecommenderItem
{
public Guid Id { get; set; }
public object Entity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我想要替换两种类型的建议,所以列表看起来像这样:
[Restaurant][Dish][Restaurant][Dish][Restaurant][Dish] //Etc...
Run Code Online (Sandbox Code Playgroud)
请注意,这些建议完全是分开的.它们纯粹基于用户的偏好生成,并且它们之间没有相关性.我的产品所有者希望在我们的应用主页上显示这些建议.
这些列表的长度不同,所以如果我添加了列表中的所有项目,我只想添加其他列表中的其余对象.可能的情况可能如下所示:
/*Other objects before this...*/[Dish][Restaurant][Dish][Dish][Dish] //Etc...
Run Code Online (Sandbox Code Playgroud)
这里的餐馆对象列表用完了,我只是想在列表的末尾添加剩余的菜肴推荐.
我已经做到了这一点,但我不确定如何捕获IndexOutOfBounds异常并在最后添加剩余的剩余对象.
public List<RecommenderItem> GetMergedRecommendationLists(List<Restaurant> restaurantRecommendations,
List<Dish> dishRecommendations)
{
//Setting up the output list.
List<RecommenderItem> output = new List<RecommenderItem>();
int count = 0;
//Check which list is longer and use that count
if (restaurantRecommendations.Count > dishRecommendations.Count)
count = dishRecommendations.Count;
else
count = restaurantRecommendations.Count;
for (int i …Run Code Online (Sandbox Code Playgroud) 我正在开发一个通用的聚合物2.0登录页面应用程序,我正在尝试使用自定义字体作为标题栏.
在我的login-page.html中,我有自定义样式:
<custom-style>
<style is="custom-style">
body {
margin: 0;
}
app-toolbar {
background-color: #4F1585;
font-family: 'Roboto', Helvetica, sans-serif;
color: white;
--app-toolbar-font-size: 24px;
}
#maintitle{
color: red;
font-family: 'font-regular';
}
</style>
</custom-style>
Run Code Online (Sandbox Code Playgroud)
我的标题/工具栏:
<app-header fixed condenses effects="waterfall">
<app-toolbar>
<img src="../icons/app-icon.png" style="height:100%;"/>
<div main-title id="maintitle">Login Page</div>
</app-toolbar>
</app-header>
Run Code Online (Sandbox Code Playgroud)
我导入ttf文件,如下所示:
<link rel="stylesheet" href="../fonts/font-regular.ttf" type="css">
Run Code Online (Sandbox Code Playgroud)
此代码将文本变为红色,但不应用该字体.相反,它切换到Times new roman.我是聚合物的新手,有什么我想念的吗?
我正在处理一个充满项目之间相似性的矩阵.我将这些保存为数据库中的对象列表.Similarity对象如下所示:
public class Similarity
{
public virtual Guid MatrixId { get; set; } //The id of the matrix the similarity is in
public virtual Guid FirstIndex { get; set; } //The id of the item of the left side of the matrix
public virtual Guid SecondIndex { get; set; } //The id of the item of the top side of the matrix
public virtual double Similarity { get; set; } //The similarity
}
Run Code Online (Sandbox Code Playgroud)
用户可以查看这些项目.我想要检索与用户已审阅的项目"相似"的项目列表.问题是我无法确定该项目的ID是否在FirstIndex或SecondIndex.我写了一些代码,它可以完成我想要的,但我想知道这是否可以在1个语句中实现.
var itemsNotReviewed …Run Code Online (Sandbox Code Playgroud) 我正在研究一种计算餐馆之间相似系数的算法.在我们能够计算出所述相似度之前,我需要3位对这两家餐馆进行评分的用户.这是一个以可能的方案为例的表:
| Restaurant 1 | Restaurant 2
User 1 | X | 2
User 2 | 1 | 5
User 3 | 4 | 3
User 4 | 2 | 1
User 5 | X | 5
Run Code Online (Sandbox Code Playgroud)
这里X没有评论,评级是用户对餐厅的评论.您可以看到可以计算相似度,因为用户2,3和4对两个餐馆都进行了评分.
因为我使用调整后的余弦相似度,所以我需要每个用户的平均评分.
现在我正在检索所有餐馆的列表和一个双循环检查是否可以计算餐馆之间的相似性.
我正在使用以下双循环来检查是否可能:
for (int i = 0; i < allRestaurants.Count; i++)
for (int j = 0; j < allRestaurants.Count; j++)
if (i < j)
matrix.Add(new Similarity()
{
Id = Guid.NewGuid(),
FirstRest = allRestaurants[i],
SecondRest = allRestaurants[j],
Sim …Run Code Online (Sandbox Code Playgroud) 我System.Speech用来识别一些短语或单词.其中之一是Set timer.我想将其扩展为Set timer for X seconds,并让代码设置X秒的计时器.这可能吗?到目前为止,我对此几乎没有任何经验,我所能找到的是我必须对语法课做一些事情.
现在我已经设置了这样的识别引擎:
SpeechRecognitionEngine = new SpeechRecognitionEngine();
SpeechRecognitionEngine.SetInputToDefaultAudioDevice();
var choices = new Choices();
choices.Add("Set timer");
var gb = new GrammarBuilder();
gb.Append(choices);
var g = new Grammar(gb);
SpeechRecognitionEngine.LoadGrammarAsync(g);
SpeechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
SpeechRecognitionEngine.SpeechRecognized += OnSpeechRecognized;
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我在几个问题上都看到了这个问题,当您在本地构建时,所有解决方案都可以正常工作。我目前在visualstudio.com上有我的代码,每当我从计算机中推送代码时,我都会自动构建。
我知道您必须安装nuget软件包(我有),并通过以下链接安装类型:
http://go.microsoft.com/fwlink/?LinkID=239644&clcid=0x409
问题是,我不知道如何从浏览器安装它,因为它是在云中构建的。
我想念什么吗?
我正在开发一个应用程序,其概念是可以在实际放置对象之前“选择”对象。因此,我想做的是在架子上放置一些低质量的物品或类似物品。当用户选择对象时,他然后可以点击以将高质量版本的对象放置在他的区域中以供进一步查看。
我想知道vuforia是否可能。我想使用这个平台,因为据我所知它可以很好地运行,并且它是跨平台的(该应用程序需要用于android和HoloLens)。
我已经建立了基本的应用程序,您可以在其中放置胶囊。现在,我想在vuforia检测到接地平面后自动放置(在本例中为胶囊)。从我可以看到的平面搜索器中,有一些事件在检测到输入时熄灭,但是我找不到在检测到地平面时熄灭的事件。vuforia还有可能吗?我知道它可以与HoloLens一起使用,但我想知道对于Android或其他移动设备是否可行。我真的不知道从哪里开始寻找,所以我希望有人能指出我正确的方向。
让我知道是否需要提供更多信息!
using System;
namespace G09 {
class Reverse {
static void Main()
{
Console.WriteLine(ReverseText(24));
Console.ReadKey();
}
static string ReverseText(int n) {
if (n < 1)
{
return "";
}
string index = "1";
string revIndex = "";
int count = 1;
string[] arr = new string[n];
for (int i = 0; i < n; i++)
{
arr[i] = index + revIndex;
for (int j = 0; j <= i; j++)
{
if (count > 8)
{
index = index + 0; …Run Code Online (Sandbox Code Playgroud)