Giter VIP home page Giter VIP logo

Comments (8)

L-M-Sherlock avatar L-M-Sherlock commented on June 3, 2024 2

I think we should be more conservative here. Because when we need to extrapolate value for easy, there is zero review for easy. If the interval is too large, the user would not press easy any more.

from fsrs-optimizer.

Expertium avatar Expertium commented on June 3, 2024 1

Hmmm. We could take this a step further.
d = (c^w1)*(b^w2), where w1 and w2 are optimized on large bodies of data. In other words, we could find the best parameters for extrapolation by trying different values on different collections.

from fsrs-optimizer.

L-M-Sherlock avatar L-M-Sherlock commented on June 3, 2024

Good idea. Let's discuss all the possible situations for the first review data.

Category One: Data includes all four ratings - 'again,' 'hard,' 'good,' and 'easy.'
Category Two: Data has only three types of ratings.
Category Three: Data has only two types of ratings.
Category Four: Data has only one type of rating.

Category One is not part of this issue's discussion. For Category Four, the current method sets the same starting stability value for all four ratings.

For Category Two, your suggested method can solve it perfectly. Lastly, the issue might be with Category Three. There are several cases that your method might not work.

Case One: again and hard both are missing.
Case Two: hard and good both are missing.
Case Three: good and easy both are missing.

For Case One, the alternative method is to set hard to good^2/easy. Then, apply again = hard^2/good

For Case Three, we can set good to hard^2 / again, Then apply easy = good^2/hard.

But for Case Two, I haven't figured out how to solve it.

from fsrs-optimizer.

Expertium avatar Expertium commented on June 3, 2024

For Case One, the alternative method is to set hard to good^2/easy. Then, apply again = hard^2/good

For Case Three, we can set good to hard^2 / again, Then apply easy = good^2/hard.

I thought about this as well, seems like a good idea. For Case Two I don't know what to do either. I'll think about it.
As for Category Four, that one is very tricky. Here's my idea: take the default values and scale them so that one of them matches the only available value of S0, preserving their ratios. Example: only "Good" is available, and the value for it is 1.5. The default value for Good is 1. That means that our measured value is 1.5 times greater than default, so we multiply all default values by 1.5.

from fsrs-optimizer.

L-M-Sherlock avatar L-M-Sherlock commented on June 3, 2024

Oh. I figure it out.

Let a, b, c and d indicate initial stability for again, hard, good and easy. Here are some equations:

  1. a = b^2/c
  2. b = (ab)^(1/2)
  3. c = (bd)^(1/2)
  4. d = c^2/b

Then we can represent b and c with a and d:

  1. b = a^(2/3)*d^(1/3)
  2. c = a^(1/3)*d^(2/3)

from fsrs-optimizer.

L-M-Sherlock avatar L-M-Sherlock commented on June 3, 2024

I find a bad case:

0.16 for hard
2.4 for good

With Easy = Good^2/Hard, the initial stability for easy should be 36. Do you think it is too large?

from fsrs-optimizer.

Expertium avatar Expertium commented on June 3, 2024

So I did the math in Excel since I wrote down values of S0 anyway to find the best values, and I removed those datapoints where I replaced S0(Easy) with 5.8 or something else.
For minimization I used symmetric MAPE.
So here are the values: w1=-0.869, w2=1.937
S0(Easy)=(S0(Hard)^w1) * (S0(Good)^w2)
SMAPE.xlsx

Oh, btw, if Hard and Good are equal, this formula still makes sure that the value for Easy is slightly greater.

from fsrs-optimizer.

L-M-Sherlock avatar L-M-Sherlock commented on June 3, 2024

We should control w1 + w2 = 1.

from fsrs-optimizer.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.